No desenvolvimento, geralmente usamos pools de conexão de banco de dados, como os pools de conexão do banco de dados DBCP. Este capítulo explicará o uso simples dos pools de conexão do banco de dados Java Connection DBCP.
Ferramentas de desenvolvimento Myeclipse2014
1. Crie primeiro um projeto da web. Nomei o nome do projeto TestJdbc. Preciso de um arquivo de configuração com web.xml para configurar o servlet. Após a conclusão da criação, a estrutura do projeto é a seguinte:
2. Crie um pacote. O nome do pacote que criei é com.szkingdom.db
3. Crie a classe de ajuda Castutil, o código é o seguinte:
pacote com.szkingDom.db; /*** Criado por Jack em 2015/12/26. * Classe de ferramenta de operação de transformação*/ public class Castutil {/** Converta em string type**/ public static string CastString (object obj) {return castutil.caststring (obj, ""); } / * * Converta para o tipo string (fornecendo valor padrão) * * / public Static String CastString (Object Obj, String DefaultValue) {return obj! = Null? String.ValueOf (OBJ): DefaultValue; } / * * Converta em tipo duplo * * / public static duplo castdouble (objeto obj) {return CastDouble (obj, (duplo) 0); } / * * Converta em tipo duplo (valor padrão fornecido) * * / public static duplo castdouble (objeto obj, dupla defaultValue) {duplo duploValue = defaultValue; if (obj! = null) {string strValue = CastString (obj); if (stringutil.isnotEmpty (strvalue)) {try {DoubleValue = Double.parseDouble (strvalue); } catch (numberFormatexception e) {defaultValue = defaultValue; }}} retornar DoubleValue; } / * * Converta em tipo longo * * / public static Long Castlong (objeto obj) {return Castlong (obj, 0); } / * * Converta em tipo longo (valor padrão fornecido) * * / public static Long Castlong (object obj, long defaultValue) {long longValue = defaultValue; if (obj! = null) {string strValue = CastString (obj); if (stringutil.isnotEmpty (strvalue)) {try {longValue = long.parselong (strvalue); } catch (numberFormatexception e) {longValue = defaultValue; }} retornar longValue; } / * * Converta para int type * * / public static int Castint (objeto obj) {return Castint (obj, 0); } / * * Converta para o tipo int (fornecendo o valor padrão) * * / public static int castint (object obj, int defaultValue) {int intvalue = defaultValue; if (obj! = null) {string strValue = CastString (obj); if (stringutil.isnotEmpty (strvalue)) {try {intvalue = Integer.parseint (strvalue); } catch (numberFormatexception e) {intvalue = defaultValue; }}} retornar intvalue; } / * * Converta em tipo booleano * * / public static boolean Castboolian (objeto obj) {return Castboolean (obj, false); } / * * Converta para o tipo booleano (fornece valor padrão) * * / public estático booleano castbooliano (objeto obj, boolean defaultValue) {boolean booleanValue = defaultValue; if (obj! = null) {booleanValue = boolean.parseBoolean (CastString (obj)); } retornar booleanValue; }} 4. Crie um arquivo de propriedade para ler a classe Help Class Propsutil, o código é o seguinte:
pacote com.szkingDom.db; importar java.io.filenotfoundException; importar java.io.ioException; importar java.io.inputStream; importar java.util.properties; /*** Criado por Jack em 2015/12/26. * Propriedades Classe de ferramenta de arquivo*/classe pública propsutil {// private static final logger logger = LoggerFactory.getLogger (propsutil.class); / * * Carregando o arquivo de propriedade * * */ public estática Propriedades LoadProps (String filename) {Propriedades Propriedades = null; InputStream inputStream = null; tente {inputStream = thread.currentThread (). getContextClassLoader (). getResourceasStream (nome do arquivo); if (inputStream == null) {lança novo fileNotfoundException (nome do arquivo + "o arquivo não é encontrado!"); } Propriedades = new Properties (); Propriedades.Load (InputStream); } catch (ioexception e) {//logger.error("load Properties Falha de arquivo ", e); System.out.println ("Carregar Propriedades do arquivo Falha:"+e); } finalmente {if (inputStream! = null) {try {inputStream.close (); } catch (ioexception e) {//logger.error("close de fluxo de entrada falha ", e); System.out.println ("Falha de fluxo de entrada de fechamento:"+e); }} retornar propriedades; } / * * Obtenha atributos de caracteres (o padrão é uma string vazia) * * * / public static string getString (Propriedades Props, String key) {return getttring (adereços, chave, ""); } / * * Obtenha atributos do tipo de caractere (o valor padrão pode ser especificado) * * / public static string getString (Propriedades Props, String Key, String DefaultValue) {String Value = DefaultValue; if (props.containsKey (key)) {value = props.getProperty (key); } retornar valor; } / * * Obtenha atributos do tipo numérico (o padrão é 0) * * / public static int getint (Propriedades Props, String key) {return getInt (adereços, chave, 0); } / * * Obtenha o atributo de tipo numérico (o valor padrão pode ser especificado) * * / public static int getInt (Propriedades Props, String Key, int DefaultValue) {int Value = DefaultValue; if (props.containsKey (key)) {value = castUtil.castint (props.getProperty (key)); } retornar valor; } / * * Obtenha a propriedade booleana (o valor padrão é false) * * / public estático booleano getBoolean (Propriedades Props, String Key) {return getBoolean (adereços, chave, false); } / * * Obtenha a propriedade booleana (o valor padrão pode ser especificado) * * / public estático booleano getBoolean (Propriedades Props, String Key, Boolean DefaultValue) {value boolean = DefaultValue; if (props.containsKey (key)) {value = castUtil.castboolean (props.getProperty (key)); } retornar valor; }} 5. Crie uma classe String Help StringUtil, o código é o seguinte:
pacote com.szkingDom.db; /*** Criado por Jack em 2015/12/26. * Classe de ferramenta da String */ public class StringUtil {/ * * Determine se a string está vazia * */ public static boolean isEmpty (string str) {if (str! = Null) {str = str.trim (); } // return stringUtils.isempty (str); retornar "" .Equals (STR); } / * * Determine se a string não está vazia * * / public static boolean não é não }} 6. Crie um arquivo de propriedade de conexão de banco de dados dbconfig.properties no diretório SRC
<span style = "cor:#333333;"> jdbc.driver = com.mysql.jdbc.driver jdbc.url = jdbc: mysql: // </span> <span style = "cor:#ff6666; corado de fundo: rgb (255, 0, 0); "> 127.0.0.1:3306/****</span> <span style =" cor:#333333; "> jdbc.username = **** jdbc.password = **** </span>
7. Coloque os pacotes JAR necessários no diretório Lib:
8. Crie uma classe de ajuda ao banco de dados usando DBCP
pacote com.szkingDom.db; importar java.io.byteArrayInputStream; importar java.sql.connection; importar java.SQL.DriverManager; importar java.SQL.PreparedStatement; importar java.sql.resultset; importar java.sql.sqLexception; importar java.util.properties; importar org.apache.commons.dbcp2.basicdataSource; /*** Criado por Jack em 2015/12/26. Operação do banco de dados Classe Assistant*/ public class DatabaseHelper {// Private Static Final Logger Logger = // LoggerFactory.getLogger (DatabaseHelper.class); driver de sequência final estática privada; URL de sequência final estática privada; nome de string final estático privado; senha de string final estática privada; // Verifique se um thread e uma conexão, thread privado estático de threadlocal <nection> conexão_holder; // thread pool estático privado final BasicDataSource data_source; static {Connection_holder = new Threadlocal <neconnect> (); Propriedades conf = propsutil.loadProps ("dbconfig.properties"); Driver = conf.getProperty ("jdbc.driver"); Url = conf.getProperty ("jdbc.url"); Nome de usuário = conf.getProperty ("jdbc.username"); Senha = conf.getProperty ("jdbc.password"); String driver = conf.getProperty ("jdbc.driver"); String url = conf.getproperty ("jdbc.url"); String userName = conf.getProperty ("jdbc.username"); String passwrod = conf.getProperty ("jdbc.password"); Data_source = new BasicDataSource (); Data_source.setDriverClassName (driver); Data_source.seturl (url); Data_source.setUserName (nome de usuário); Data_source.setpassword (passwrod); // Configuração do parâmetro do pool de conexão do banco de dados: http://www.cnblogs.com/xdp-gacl/p/4002804.html //http://greemranqq.iteye.com/blog/1969273 //http://blog.csdn.net/j903829182/article/details/50190337 //http://blog.csdn.net/jiutianhe/article/details/39670817 //httia //http://blog.csdn.net/kerafan/article/details/50382998 //http://blog.csdn.net/a9529lty/article/details/43021801 ///Set the maximum total number of idle and borrowed connections, and can be activated at the same time. Data_source.setmaxtotal (60); // defina o tamanho inicial data_source.setInitialSize (10); // conexão ociosa mínima data_source.setminidle (8); // conexão inativa máxima data_source.setMaxidle (16); // Tempo limite do tempo de espera milissegunds data_source.setmaxwaitmillis (2*10000); // Somente a conexão atual é inválida, crie outra conexão para a consulta atual usar data_source.setTestonBorrow (true); // RemoveabandOnedTimeout: Reciclagem de conexões não utilizadas (ausentes) (o padrão é de 300 segundos, ajustado para 180) data_source.setRemoveaDonedOnedTimeout (180); // removeabandon: Após o tempo de removeabandonEounTimeout, excede o tempo de removeabandonTimeout, seja para reciclar conexões não utilizadas (ausentes) (o padrão é falso, ajustado a verdadeiro) //data_source.setRemoveaDoneDonMaintonain(RemoveaBandeNonessonaventenante); Data_source.setRemoveAbandOneDonBorrow (true); // testhileidle data_source.setTestOnReturn (true); // testOnReturn data_source.setTestOnReturn (true); // setremoveabandonMaintenante Data_source.SetRemoveAbandOneDonMaintenante (true); // Registre o log data_source.setLogabandon (true); // setAddress de envio automático data_source.setDefaultAutocommit (true); // data_source.setenableautocommitonReturn (true); System.out.println ("Preencha a configuração de parâmetros do pool de conexão do banco de dados Data_source !!"); /*tente {class.ForName (driver); System.out.println ("Load JDBC Driver Success"); } catch (classNotFoundException e) {// logger.error ("não pode carregar o driver JDBC", e); System.out.println ("Não pode carregar o driver JDBC:" + e); } finalmente {}*/} // private Static Final Threadlocal <neconnect> Connection_holder = new Threadlocal <neconoming> (); /*** Obtenha conexão do banco de dados*/conexão estática pública getConnection () {conexão conn = Connection_holder.get (); // 1 if (conn == null) {try {// conn = driverManager.getConnection (url, nome de usuário, senha); Conn = data_source.getConnection (); System.out.println ("Get Connection Success"); } catch (sqLexception e) {// logger.error ("Get Faille Connection", e); System.out.println ("Get Faille Connection:" + E); } finalmente {/*system.out.println ("conexão inativa mínima minidle ="+data_source.getminidle ()); System.out.println ("conexão maxidle maxidle ="+data_source.getmaxidle ()); System.out.println ("Número máximo de conexões maxtotal ="+data_source.getmaxtotal ()); System.out.println ("tamanho inicial inicialSize ="+data_source.getInitialSize ()); System.out.println ("Tempo limite de espera do tempo maxwaitmillis ="+(data_source.getmaxwaitmillis ()/1000)); System.out.println ("Get Active Connections getNumactive () ="+data_source.getNumactive ()); System.out.println ("Obtenha o número de conexões getNumidle ="+data_source.getNumidle ());*/ Connection_Holder.set (Conn); }} retornar Conn; }/ *** Feche a conexão do banco de dados*/ public static void closeconnection () {conexão conn = Connection_holder.get (); // 1 if (conn! = Null) {try {Conn.Close (); System.out.println ("Sucesso da conexão fechada"); } catch (sqLexception e) {// logger.error ("Falha de conexão fechada", e); System.out.println ("Falha de conexão fechada:" + e); lançar nova execução de tempo de execução (e); } finalmente {Connection_holder.remove (); }}} // Execute operações de banco de dados public estático sincronizado void update (int thlsh, string ltnr) {conexão conn = getConnection (); if (conn == null) {System.out.println ("A conexão () no método de atualização é nula !!"); } Preparado estatamento pstmt = null; System.out.println ("Atualize start!"); int ltlsh = 0; tente {// string sql = "Atualize o conjunto de mensagens do conjunto de mensagens =? onde id =?"; // string sql1 = "Selecione ltlsh de t_zxthlsk onde lsh =?"; String sql = "Atualize t_wx_ltnrk B Definir B.Ltnr =? Where B.Lsh ="+ "(selecione A.ltlsh de T_ZXTHLSK A Where A.lsh =?)"; System.out.println ("A instrução SQL atualizada é: SQL->"+SQL); Pstmt = Conn.Preparestatement (SQL); pstmt.setBlob (1, novo byteArrayInputStream (ltnr.getBytes ())); pstmt.setInt (2, thlsh); /*pstmt.SetString(1, "Este é o teste DBCP2 2222"); pstmt.setInt (2, 6);*/if (pstmt.executeUpdate ()> 0) {//system.out.println("update os dados com id = 1 com sucesso! "); System.out.println ("Atualize os dados de conteúdo de bate -papo de thlsh ="+thlsh+"com sucesso!/N conteúdo de bate -papo é:"+ltnr); } //conn.commit (); /*While(rs1.Next ()) {ltlsh = rs1.getInt ("ltlsh"); System.out.println ("Consulte o número do fluxo de bate-papo com sucesso, o número do fluxo de bate-papo é ltlsh->"+ltlsh); }*///pstmt.setString(1, "Excelente atualização de conteúdo1"); //pstmt.setInt(2, 1); //pstmt.setBlob(1, new ByteArrayInputStream ("12345 China" .GetBytes ())); //pstmt.setInt(2, 76732); /*if(pstmt.executeUpdate ()> 0) {//system.out.println("Update dados com id = 1 bem -sucedido! "); System.out.println ("Atualize dados com ID = 76732 bem -sucedido!"); } Conn.Commit ();*/ System.out.println ("Update t_wx_ltnrk success"); } catch (sqLexception e) {//logger.error("querery entidade falha da lista ", e); System.out.println ("Atualizar a exceção de dados Connection ="+Conn); System.out.println ("Atualize T_WX_ltnrk Falha:" + e); lançar nova execução de tempo de execução (e); } finalmente {// ClosConnection (); // ClosConnection (); if (pstmt! = null) {tente {pstmt.close (); } catch (sqLexception e) {// TODO BLOCO DE CAPAGEM AUTOMENTADO E.PRINTSTACKTRACE (); System.out.println ("Falha na Falha na Falha na Falha"); }} if (conn! = null) {try {Conn.Close (); } catch (sqLexception e) {// TODO BLOCO DE CAPAGEM AUTOMENTADO E.PRINTSTACKTRACE (); }} // Remova a conexão no thread. Se a conexão não for removida, a conexão obtida será fechada. A operação de dados não pode ser realizada. Connection_holder.remove (); // ClosConnection (); } // retorna entityList; }} 9. O pool básico de conexão do banco de dados é criado. Depois disso, você pode simular a conexão do banco de dados através do método de atualização do DatabaseHelper para simular a operação de obter conexões de banco de dados e executar operações de dados de acordo com suas próprias necessidades.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.