Простое соединение базы данных Java и класс инструментов для закрытия
Люди, которые пишут заявки на JDBC, часто испытывают головные боли о закрытии ресурсов. Эти коды скучны. Как вы можете закрыть их простым кодом? Ниже я написал метод, чтобы облегчить вашу боль:
/ *** Закройте все закрытые ресурсы** @param objs. Объектами закрытых ресурсов являются соединение, оператор и результаты, а другие типы ресурсов автоматически игнорируются*/ public static void closeall (объект ... objs) {for (Object obj: objs) {if (obj instanceOf connection) close (соединение) obj); if (obj instanceOf утверждение) закрыть ((утверждение) obj); if (obj exanceof resultset) close ((ResultSet) OBJ); }} Этот метод имеет параметр «...», который на самом деле является методом переменной в Java 5. Вы можете напрямую закрыть объект ресурса, который вы хотите закрыть при вызовах независимо от порядка или номера. Например:
catch (sqlexception e) {e.printstacktrace (); } наконец {dbtools.closeall (stmt, pstmt1, pstmt2, conn); }
Полный метод написания этого класса приведен ниже:
пакет com.lavasoft.ibatistools.common; Импорт com.lavasoft.ibatistools.bean.table; Import com.lavasoft.ibatistools.metadata.datasourcemetadata; Импорт com.lavasoft.ibatistools.metadata.mysqldatasourcemetadata; импортировать java.io.ioexception; импортировать java.io.inputstream; Импорт java.sql.*; импортировать java.util.list; импортировать java.util.properties; / ** * Простое подключение к базе данных Java и закрытие класса инструмента * * @Author Lezhimin 11-12-20 16:32 */ public Class DBTOOLS {Private Static String DriverClassName, URL, пользователь, пароль; static {init (); } private static void init () {inputStream in = dbtools.class.getResourceasStream ("/com/lavasoft/ibatistools/jdbc.properties"); Свойства Preps = новые свойства (); попробуйте {preps.load (in); DriverClassName = preps.getProperty ("jdbc.driver"); url = preps.getproperty ("jdbc.url"); user = preps.getProperty ("jdbc.username"); пароль = preps.getProperty ("jdbc.password"); } catch (ioException e) {e.printstackTrace (); }} / *** Создать соединение JDBC** @return a JDBC Connection* / public Static Connection makeConnection () {connection conn = null; try {class.forname (DriverClassName); conn = drivermanager.getConnection (URL, пользователь, пароль); } catch (classnotfoundexception e) {e.printstacktrace (); } catch (sqlexception e) {e.printstacktrace (); } return conn; } public static void close (connect conn) {if (conn! = null) try {conn.close (); } catch (sqlexception e) {e.printstacktrace (); }} public static void close (ResultSet rs) {if (rs! = null) попробуйте {rs.close (); } catch (sqlexception e) {e.printstacktrace (); }} public static void close (оператор STMT) {if (stmt! = null) try {stmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} / *** Закройте все закрытые ресурсы** @param objs. Объекты закрытых ресурсов - это соединение, оператор и результаты, а другие типы ресурсов автоматически игнорируются* / public static void closeall (объект ... objs) {for (Object obj: Objs) {if (obj exancef exanceof connectof) close (соединение) obj); if (obj instanceOf утверждение) закрыть ((утверждение) obj); if (obj exanceof resultset) close ((ResultSet) OBJ); }} public static void main (string [] args) {dataSourCemetAdata dbmd = mysqldatasourcemetadata.instatnce (); Список <table> tablelist = dbmd.getalltablemetadata (dbtools.makeconnection ()); для (таблица таблицы: табличка) {System.out.println (таблица); }}}
Поскольку это инструмент для написания, соединение используется очень мало раз, поэтому здесь используется режим JDBC, а пул соединений не используется. Метод закрытия очень хорош в использовании, уменьшая объем кода и повышает надежность и качество программы.
Простой универсальный инструмент JDBC
Поддерживает несколько баз данных, генерирует соединения единым образом и выпускает ресурсы оптимальным и простым способом.
Добро пожаловать, чтобы сфотографироваться!
Импорт org.apache.commons.logging.log; Импорт org.apache.commons.logging.logfactory; Импорт java.sql.*; импортировать java.util.list; импортировать java.util.properties; /*** Общий инструмент работы базы данных, предоставление подключения к базе данных, выполнение SQL, закрытие ресурсов и другие функции. Поддерживаемые базы данных являются Oracle10G и MySQL5.x. </ P> * * @author leizhimin 2012-03-05 11:22 */ public class dbtoolkit {private static log log = logfactory.getlog (dbtoolkit.class); static {try {class.forname ("oracle.jdbc.driver.oracledriver"); Class.forname ("com.mysql.jdbc.driver"); } catch (classnotfoundexception e) {log.error («Произошла ошибка Загрузка драйвера базы данных!»); e.printstacktrace (); }} /** * Создать подключение к базе данных * * @param URL -адреса URL -адреса Строки URL * @param Список свойств любых пар строки /значения для параметров подключения; Обычно, по крайней мере, «Пользовательские» и «пароль» должны быть включены свойства подключения к базе данных JDBC * @Throws SQLEXCECTION THOH, когда подключение к удалению */ Public Static Connection Connection (String URL, свойства свойств) THRES SQLException {Connect Conn = null; try {conn = drivermanager.getConnection (url, свойства); } catch (sqlexception e) {log.error ("Исключение произошло при получении подключения к базе данных", e); бросить E; } return conn; } /** * Execute a static SQL statement query on a database connection* * @param conn Database connection* @param staticSql static SQL statement string* @return Return query result set ResultSet object* @throws SQLException Throws when executing exception*/ public static ResultSet executeQuery(Connection conn, String staticSql) throws SQLException { ResultSet rs = null; try {// Создать объект, который выполняет оператор SQL STMT = conn.createStatement (); // Выполнить SQL и получить результат возврата rs = stmt.executequery (staticsql); } catch (sqlexception e) {log.error ("Произошла ошибка при выполнении оператора SQL, пожалуйста, проверьте! /n" + staticsql); бросить E; } return rs; } / *** Выполнить статический оператор SQL в подключении базы данных** @param conn Connection* @param staticsql static sql starte string* @throws sqlexception throws при выполнении исключения* / public static void executionsql (connection conn, string atticsql) throws sqlexception {ratport static = nullesql; try {// Создать объект, который выполняет SQL STMT = conn.createStatement (); // Выполнить SQL и получить результат, возвращаемый STMT.Execute (staticsQL); } catch (sqlexception e) {log.error ("Произошла ошибка при выполнении операторов SQL, пожалуйста, проверьте! /n" + staticsql); бросить E; } наконец {close (stmt); }} /*** Выполнить партию статических операторов SQL в подключении к базе данных** @param conn connect connection* @param sqllist static static sql collection* @throws sqlexception throws при выполнении Exception* /public void executueBatchsql (connect Conn, sist> sqllist) stmt = conn.createStatement (); for (string sql: sqllist) {stmt.addbatch (sql); } // Выполнить SQL и получить результат возврата stmt.executebatch (); } catch (sqlexception e) {log.error ("Произошла ошибка при выполнении пакетного оператора SQL, пожалуйста, проверьте!"); бросить E; }} / *** Получить данные Oracle. Указанная последовательность Следующее значение** @param Conn Connection Connection* @param SEQ_NAME Имя последовательности* @return Следующее значение* / public static long sequencenextval (соединение conn, string seq_name) {long val = -1L; Утверждение stmt = null; Результат RS = NULL; try {// Создать объект, который выполняет SQL STMT = conn.createStatement (); // Выполнить SQL и получить результат возврата rs = stmt.executequery ("select" + seq_name + ".nextval из Dual"); if (rs.next ()) val = rs.getlong (1); } catch (sqlexception e) {log.error ("#ошибка#: была ошибка в получении значения последовательности, пожалуйста, проверьте! /n" + seq_name); e.printstacktrace (); бросить новое runtimeexception (e); } наконец {close (rs); закрыть (STMT); } return val; } / *** Закройте все закрытые ресурсы JDBC, независимо от порядка, всегда можно выполнять в правильном порядке** @param objs. Закрытыми объектами ресурса являются соединение, утверждение и результаты, а другие типы ресурсов автоматически игнорируются* / public static void closeall (объект ... objs) {для (объект obj: objs). для (объект obj: objs) if (obj instanceOf утверждение) закрыть ((утверждение) obj); for (Object obj: OBJS) if (obj InstanceOf Connection) Close ((соединение) obj); } private static void close (connect conn) {if (conn! = null) try {conn.close (); } catch (sqlexception e) {log.error ("Исключение произошло при закрытии подключения к базе данных!"); }} private static void close (ResultSet rs) {if (rs! = null) try {rs.close (); } catch (sqlexception e) {log.error ("Исключение произошло при закрытии набора результатов!"); }} private static void close (оператор STMT) {if (stmt! = null) try {stmt.close (); } catch (sqlexception e) {log.error ("Исключение произошло при закрытии оператора SQL!"); }}/** * Тестовый код, бесполезный * * @param args * @Throws SQLexCeption */public static void main (string [] args) throws sqlexception {string tns = "jdbc: oracle: thin: @/n" + "(description =/n" + "/t (Adder_list =/n" + ". "/t/t(Address=(protocol=tcp)(host=10.87.30.44)(port=1521)/n" + "/t/t(Address=(protocol=tcp)(host=10.87.30.45)(port=1521)/n". "/t/t(Address=(protocol=tcp)(host=10.87.30.46)(port=1521)/n" + "/t/t (load_balance = yes)/n" + "/t)/n" + "/t (connect_data =/n" + "/t/t/t (service_name = kfcs)"/n "/t"/t/t/t (service_name = kfc) "/t"/t/t/t (service_name = kfcs) "/n". =/n " +"/t/t/t (type = session)/n " +"/t/t/t (method = basic)/n " +"/t/t/t (retries = 5)/n " +"/t/t/t (задержка = 15)/n " +"/t/t)/n " +"/t)/n " +"/t)/n ")") "; Свойства p_ora = new Properties (); p_ora.put ("user", "base"); p_ora.put ("пароль", "1qaz! qaz"); p_ora.put ("Internal_logon", "Normal"); Соединение ora_conn = makeconnection (tns, p_ora); Resultset rs1 = ora_conn.createStatement (). ExecuteQuery («Выберите счет (1) из base.cfg_static_data"); rs1.next (); System.out.println (rs1.getint (1)); rs1.close (); ora_conn.close (); Свойства p_mysql = new Properties (); p_mysql.put ("user", "root"); p_mysql.put ("пароль", "Leizm"); String url = "jdbc: mysql: // localhost: 3306/tdmc"; Соединение mysql_conn = makeconnection (url, p_mysql); Resultset rs2 = mysql_conn.createStatement (). Executequery («Выберите счет (1) из cfg_code»); rs2.next (); System.out.println (rs2.getint (1)); rs2.close (); mysql_conn.close (); }}