Conexão simples de banco de dados Java e aula de ferramentas de fechamento
As pessoas que escrevem aplicativos JDBC geralmente têm dores de cabeça sobre os recursos de fechamento. Esses códigos são chatos. Como você pode fechá -los com código simples? Abaixo, escrevi um método para aliviar sua dor:
/ *** Feche todos os recursos fechados** @param Objs Os objetos de recurso fechado são conexão, instrução e resultado de resultado, e outros tipos de recursos são automaticamente ignorados*/ public static void closoull (object ... objs) {for (object obj: objs) {if (obj instanceof conexão) feche (() obj); if (declaração obj instanceof) fechar ((declaração) obj); if (obj instanceof ResultSet) fechar ((ResultSet) obj); }} Este método possui o parâmetro "...", que é na verdade um método de parâmetro variável no Java 5. Você pode fechar diretamente o objeto de recurso que deseja fechar ao ligar, independentemente do pedido ou número. Por exemplo:
Catch (sqLexception e) {E.PrintStackTrace (); } finalmente {dbtools.closeAll (stmt, pstmt1, pstmt2, conn); }
O método completo de escrita desta classe é dado abaixo:
pacote com.lavasoft.ibatistools.common; importação com.lavasoft.ibatistools.bean.table; import com.lavasoft.ibatistools.metadata.datasourcemetadata; import com.lavasoft.ibatistools.metadata.mysqldataSourceMetadata; importar java.io.ioException; importar java.io.inputStream; importar java.sql.*; importar java.util.list; importar java.util.properties; / ** * Conexão simples de banco de dados Java e classe de fechamento da ferramenta de fechamento * * @Author Leizhimin 11-12-20 16:32 */ classe pública DBTOOLS {private Static String driverClassName, URL, usuário, senha; estático {init (); } private static void init () {inputStream em = dbtools.class.getResourceasStream ("/com/lavasoft/ibatistools/jdbc.properties"); Propriedades Preps = new Properties (); tente {preps.load (in); driverclassName = preps.getProperty ("jdbc.driver"); url = preps.getProperty ("jdbc.url"); usuário = preps.getProperty ("jdbc.username"); senha = preps.getProperty ("jdbc.password"); } catch (ioexception e) {e.printStackTrace (); }} / *** Crie uma conexão jdbc** @return a jdbc conexão* / public static conexão makeconnection () {conexão conn = null; tente {Class.ForName (DriverClassName); Conn = DriverManager.getConnection (URL, usuário, senha); } catch (classNotFoundException e) {e.printStackTrace (); } catch (sqLexception e) {e.printStackTrace (); } retornar Conn; } public static void close (conexão conn) {if (conn! = null) tente {conn.close (); } catch (sqLexception e) {e.printStackTrace (); }} public static void close (ResultSet rs) {if (rs! = null) tente {rs.close (); } catch (sqLexception e) {e.printStackTrace (); }} public static void close (instrução stmt) {if (stmt! = null) tente {stmt.close (); } catch (sqLexception e) {e.printStackTrace (); }} / *** Feche todos os recursos fechados** @param objs Os objetos de recurso fechado são conexão, instrução e resultado de resultado, e outros tipos de recursos são automaticamente ignorados* / public static void closetll (objeto ... objs) {para (objeto obj: objs) {if (obj instância de conexão) feche ((conexão) obj); if (declaração obj instanceof) fechar ((declaração) obj); if (obj instanceof ResultSet) fechar ((ResultSet) obj); }} public static void main (string [] args) {DataSourCemetadata dbmd = mysqldatasourCemetadata.Instatnce (); List <table> tableList = dbmd.getAlltableMetadata (dbtools.makeconnection ()); for (tabela Tabela: tableList) {System.out.println (tabela); }}}
Por ser uma ferramenta de escrita, a conexão é usada muito poucas vezes, portanto o modo JDBC é usado aqui e o pool de conexão não é usado. O método de fechamento é muito bom de usar, reduzindo a quantidade de código e melhorando a confiabilidade e a qualidade do programa.
Uma ferramenta universal JDBC simples
Suporta vários bancos de dados, gera conexões de maneira unificada e libera recursos da maneira ideal e mais simples.
Bem -vindo a tirar fotos!
importar org.apache.commons.logging.log; importar org.apache.commons.logging.logfactory; importar java.sql.*; importar java.util.list; importar java.util.properties; /*** Ferramenta de operação geral do banco de dados, fornecendo aquisição de conexão de banco de dados, execução SQL, fechamento de recursos e outras funções. Os bancos de dados suportados são Oracle10G e MySQL5.x. </p> * * @author leizhimin 2012-03-05 11:22 */ public class DBtoolkit {log de log estático privado = logFactory.getLog (dbtoolkit.class); static {try {Class.ForName ("oracle.jdbc.driver.oracledriver"); Class.ForName ("com.mysql.jdbc.driver"); } catch (classNotFoundException e) {Log.error ("Ocorreu um erro carregando o driver do banco de dados!"); E.PrintStackTrace (); }} /** * Crie uma conexão com o banco de dados * * @param url conexão de banco de dados URL String * @param Lista de propriedades de qualquer string tag /value pares para os parâmetros de conexão; Geralmente, pelo menos, as propriedades de "usuário" e "senha" devem ser incluídas * @return Uma conexão com o banco de dados JDBC * @THOWS SQLEXCECTIONS joga quando a conexão falha */ conexão estática pública makeConnection (String URL, Propriedades Propriedades) lança SqLexception {Connection Conn = null; tente {Conn = DriverManager.getConnection (URL, Propriedades); } catch (sqLexception e) {log.error ("Exceção ocorreu ao obter a conexão do banco de dados", e); jogar e; } retornar Conn; } / *** Execute uma consulta estática de instrução SQL em uma conexão de banco de dados** @param con conexão* @param sticticsql static sql string string* @return return @sqlull = sqLEXCECTOM quando executado Excection / public Static ResultSet Execute (conexão de conexão, sticksql) tente {// crie um objeto que execute a instrução SQL sTMT = Conn.Createstatement (); // execute o SQL e obtenha o resultado de retorno rs = stmt.executeQuery (STATICSQL); } catch (sqLexception e) {log.error ("Ocorreu um erro ao executar a instrução SQL, verifique! /n" + STATICSQL); jogar e; } retornar RS; } / *** Execute uma instrução SQL estática em uma conexão com o banco de dados** @param Connection Connection* @Param STATICSQL STATION SQL String String* @Throws SQLEXCECTIONS lança ao executar a exceção* / public static void Executes Executes (Connection Connecticut) tente {// Crie um objeto que execute sql stmt = conn.createstatement (); // execute o SQL e obtenha o resultado retornou stmt.execute (STATICSQL); } catch (sqLexception e) {log.error ("Ocorreu um erro ao executar instruções SQL, verifique! /n" + STATICSQL); jogar e; } finalmente {close (stmt); }} /*** Execute um lote de instruções SQL estáticas em uma conexão com o banco de dados** @Param Connection Connection* @param sqllist static sql string coleta* @throws sqLexception lança quando executação Excepção* /public estatic void ExecuteBatchSql (conexão, list <bumpt) {strings) O Throws) /public STATION EXCUTEBUTEBATCSQL (Connection, list) Instrução sql stmt = conn.createstatement (); para (string sql: sqllist) {stmt.addbatch (sql); } // Execute o SQL e obtenha o resultado de retorno stmt.executeBatch (); } catch (sqLexception e) {log.error ("Ocorreu um erro ao executar uma instrução SQL em lote, verifique!"); jogar e; }} / *** Obtenha dados do Oracle uma sequência especificada Próximo valor** @param Connection Connection* @param seq_name Nome da sequência* @return Sequence Próximo valor* / public static Long SequencenextVal (conexão Conn, string seq_name) {long val = -1l; Instrução stmt = null; ResultSet rs = null; tente {// Crie um objeto que execute sql stmt = conn.createstatement (); // Execute o SQL e obtenha o resultado de retorno rs = stmt.executeQuery ("selecione" + seq_name + ".nextVal do dual"); if (rs.next ()) val = rs.getlong (1); } catch (sqLexception e) {log.error ("#Erro#: houve um erro na obtenção do valor da sequência, verifique! /n" + seq_name); E.PrintStackTrace (); lançar nova execução de tempo de execução (e); } finalmente {close (rs); fechar (stmt); } retornar val; } / *** Feche todos os recursos JDBC fechados, independentemente da ordem, sempre podem ser executados na ordem correta** @param objs Os objetos de recurso fechado são conexão, instrução e resultado de resultado e outros tipos de recursos são automaticamente ignorados* / public estático closall (object ... objs) {para (object obj: obj) set. para (objeto obj: objs) if (obj instanceof declaração) fechar ((declaração) obj); para (object obj: objs) if (obj instanceof conexão) fechar ((conexão) obj); } private estático void fechado (conexão conn) {if (conn! = null) tente {conn.close (); } catch (sqLexception e) {log.error ("A exceção ocorreu ao fechar a conexão do banco de dados!"); }} private estático void fechado (ResultSet rs) {if (rs! = null) tente {rs.close (); } catch (sqLexception e) {log.error ("Exceção ocorreu ao fechar o conjunto de resultados!"); }} private estático void fechado (instrução stmt) {if (stmt! = null) tente {stmt.close (); } catch (sqLexception e) {Log.error ("Exceção ocorreu ao fechar a instrução SQL!"); }}/** * Código de teste, inútil * * @param args * @throws sqLexception */public static void main (string [] args) lança sqLexception {string tns = "jdbc: oracle: fin: @/n" + "(descrição =/n" + "/t (endereço_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 = sim)/n" + "/t)/n" + "/t (conect_data =/n" + "/t/t/t/t/t/t/t/t/t) =/n " +"/t/t/t (tipo = sessão)/n " +"/t/t/t (método = básico)/n " +"/t/t/t/t/t/t/t/t/t/t/t/t/t/t/t/5)/n " +"/t/t/t (tardar = 15)/n " +"/t/t)/n "/t)/n" + "/t)/n" ") Propriedades p_ora = new Properties (); p_ora.put ("user", "base"); p_ora.put ("senha", "1qaz! Qaz"); p_ora.put ("internal_logon", "normal"); Conexão ora_conn = makeconnection (tns, p_ora); ResultSet rs1 = ora_conn.createstatement (). ExecuteQuery ("Selecione contagem (1) de base.cfg_static_data"); rs1.next (); System.out.println (rs1.getInt (1)); rs1.close (); ora_conn.close (); Propriedades p_mysql = new Properties (); p_mysql.put ("user", "root"); p_mysql.put ("senha", "leizm"); String url = "jdbc: mysql: // localhost: 3306/tdmc"; Conexão mysql_conn = makeconnection (url, p_mysql); ResultSet rs2 = mysql_conn.createstatement (). ExecuteQuery ("Selecione contagem (1) de CFG_CODE"); rs2.next (); System.out.println (rs2.getInt (1)); rs2.Close (); mysql_conn.close (); }}