En el desarrollo, a menudo utilizamos grupos de conexión de bases de datos, como grupos de conexión de base de datos DBCP. Este capítulo explicará el uso simple de Java Connection DBCP Database Biblioteca Pools de conexión.
Herramientas de desarrollo myeclipse2014
1. Primero cree un proyecto web. Llamé el nombre del proyecto TestJDBC. Necesito un archivo de configuración con Web.xml para configurar el servlet. Después de completar la creación, la estructura del proyecto es la siguiente:
2. Crea un paquete. El nombre del paquete que creé es com.szkingdom.db
3. Cree la clase de ayuda Castutil, el código es el siguiente:
paquete com.szkingdom.db; /*** Creado por Jack el 2015/12/26. * Clase de herramienta de operación de transformación*/ public class Castutil {/** Convertir a tipo de cadena**/ public static String CastString (Object obj) {return Castutil.castString (obj, ""); } / * * Convertir al tipo de cadena (proporcionando valor predeterminado) * * / public static String CastString (Object obj, String DefaultValue) {return obj! = NULL? String.ValueOf (obj): defaultValue; } / * * Convertir al tipo doble * * / public static Double CastDouble (Object obj) {return CastDouble (obj, (doble) 0); } / * * Convertir a tipo doble (valor predeterminado proporcionado) * * / public static double CastDouble (Object OBJ, Double DefaultValue) {double DoubleValue = DefaultValue; if (obj! = null) {string strValue = caststring (obj); if (StringUtil.ISnotEmpty (strValue)) {try {doubleValue = double.parsedOuble (strValue); } Catch (NumberFormateException e) {defaultValue = defaultValue; }}} return DoubleValue; } / * * Convertir al tipo largo * * / public static long Castlong (object obj) {return Castlong (obj, 0); } / * * Convertir al tipo largo (valorado valor predeterminado) * * / 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 (NumberFormateException e) {longValue = defaultValue; }} return longValue; } / * * Convertir a int type * * / public static int } / * * Convertir al tipo int (proporcionando el valor predeterminado) * * / 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 (NumberFormateException e) {intValue = defaultValue; }}} return intValue; } / * * Convertir al tipo booleano * * / public static boolean Castboolean (object obj) {return Castboolean (obj, falso); } / * * Convertir al tipo booleano (proporciona un valor predeterminado) * * / public static boolean Castboolean (objeto obj, boolean defaultValue) {boolean booleanValue = defaultValue; if (obj! = null) {booleanValue = boolean.parseboolean (caststring (obj)); } return booleanValue; }} 4. Cree un archivo de propiedad para leer la clase de ayuda Propsutil, el código es el siguiente:
paquete com.szkingdom.db; import java.io.filenotfoundException; import java.io.ioException; import java.io.inputstream; import java.util.properties; /*** Creado por Jack el 2015/12/26. * Clase de herramienta de archivo de propiedades*/clase pública PropSUTIL {// private static final logger = loggerFactory.getLogger (propsutil.class); / * * Archivo de propiedad de carga * * */ Propiedades estáticas públicas LoadProps (String FileName) {Properties Properties = null; InputStream InputStream = null; Pruebe {inputStream = Thread.CurrentThread (). GetContextClassLoader (). GetResourceasStream (nombre de archivo); if (inputStream == NULL) {tire nuevo FileNotFoundException (FileName + "El archivo no se encuentra!"); } propiedades = new Properties (); Properties.Load (InputStream); } Catch (ioException e) {//logger.error("Later Propiedades falla del archivo ", e); System.out.println ("Falla del archivo de propiedades de carga:"+e); } Finalmente {if (inputStream! = null) {try {inputStream.close (); } Catch (ioException e) {//logger.error("Cle Fause de flujo de entrada ", e); System.out.println ("Cerrar falla de flujo de entrada:"+e); }} Propiedades de retorno; } / * * Obtener atributos de caracteres (el valor predeterminado es una cadena vacía) * * * / public static string getString (props de propiedades, tecla de cadena) {return getString (props, key, ""); } / * * Obtener atributos de tipo de carácter (se puede especificar el valor predeterminado) * * / public static string getString (props de propiedades, clave de cadena, cadena defaultValue) {string value = defaultValue; if (props.containskey (key)) {value = props.getProperty (key); } valor de retorno; } / * * Obtener atributos de tipo numérico (el valor predeterminado es 0) * * / public static int } / * * Obtenga el atributo de tipo numérico (se puede especificar el valor predeterminado) * * / public static int if (props.containskey (key)) {value = cassTUtil.castInt (props.getProperty (key)); } valor de retorno; } / * * Obtenga la propiedad booleana (el valor predeterminado es falso) * * / public static boolean getBoolean (Propiedades de propiedades, tecla de cadena) {return getBoolean (props, key, false); } / * * Get Boolean Propiedad (se puede especificar el valor predeterminado) * * * / public static boolean getBoolean (Propiedades de propiedades, clave de cadena, Boolean DefaultValue) {value boolean = defaultValue; if (propss.containskey (key)) {value = castutil.castboolean (props.getproperty (key)); } valor de retorno; }} 5. Cree una clase de Ayuda de cadena StringUtil, el código es el siguiente:
paquete com.szkingdom.db; /*** Creado por Jack el 2015/12/26. * String Tool Class */ public class StringUtil {/ * * Determine si la cadena está vacía * */ public static boolean isEmpty (string str) {if (str! = Null) {str = str.trim (); } // return stringUtils.isEmpty (str); regresar "" .equals (str); } / * * Determine si la cadena no está vacía * * / public static boolean isnotempty (string str) {return! IsEmpty (str); }} 6. Cree un archivo de propiedad de conexión de base de datos DBConfig.Properties en el directorio SRC
<span style = "color:#3333333;"> jdbc.driver = com.mysql.jdbc.driver jdbc.url = jdbc: mysql: // </span> <span style = "color:#ff66666; background-color: rgb (255, 0, 0, 0)"> 127.0.0.1:3306/** sabe style = "Color:#3333333;"> jdbc.username = **** jdbc.password = **** </span>
7. Pon los paquetes de jar necesarios en el directorio LIB:
8. Cree una clase de ayuda de base de datos usando DBCP
paquete com.szkingdom.db; import java.io.bytearrayInputStream; import java.sql.connection; import java.sql.drivermanager; import java.sql.preparedStatement; import java.sql.resultset; import java.sql.sqlexception; import java.util.properties; importar org.apache.commons.dbcp2.basicdataSource; /*** Creado por Jack el 2015/12/26. CLASE DE ASISTENTE DE OPERACIÓN DE BASE DE DATA*/ Class public databaseHelper {// Private static final logger logger = // loggerFactory.getLogger (databaseHelper.class); controlador de cadena final estática privada; URL de cadena final estática privada; Nombre de usuario de cadena final estática privada; contraseña de cadena final estática privada; // Asegúrese de un hilo y una conexión, hilo a hilo static estatic final shreadlocal <nection> conexión_holder; // Pool de subprocesos estatales privados finales básicos dataDataSource data_source; static {Connection_Holder = new ThreadLocal <Enection> (); Propiedades conf = propsutil.loadprops ("dbconfig.properties"); Controlador = conf.getProperty ("jdbc.driver"); Url = conf.getProperty ("jdbc.url"); Username = conf.getProperty ("jdbc.username"); Contraseña = conf.getProperty ("jdbc.password"); String Driver = conf.getProperty ("jdbc.driver"); Cadena url = conf.getProperty ("jdbc.url"); String UserName = conf.getProperty ("jdbc.username"); String passwrod = conf.getProperty ("jdbc.password"); Data_source = new BasicDataSource (); Data_source.setDrivClassName (controlador); Data_source.seturl (url); Data_source.setUsername (nombre de usuario); Data_source.setpassword (passwrod); // Configuración del parámetro del grupo de conexión de base de datos: 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 //http://bsr1983.iteye.com/blogils/39670817 //http://bsr1983.iteye.com/blog/209246746774242424242424242424242424242424242424242424242 //http://blog.csdn.net/kerafan/article/details/50382998 //http://blog.csdn.net/a9529lty/article/details/43021801 /// Establece el número total de las alianzas y se puede activar al mismo tiempo. Data_source.setMaxToTal (60); // establece el tamaño inicial data_source.setinitialSize (10); // Conexión mínima de conexión inactiva data_source.setminidle (8); // Conexión de inactividad máxima data_source.setMaxidle (16); // tiempo de espera de tiempo de espera data_source.setmaxwaitmillis (2*10000); // Solo la conexión actual no es válida, cree otra conexión para la consulta actual para usar data_source.settestonBorrow (verdadero); // eliminar las conexiones de reciclaje de tiempo de reciclaje (ausente) (el valor predeterminado es de 300 segundos, ajustado a 180) data_source.setRemoveAbandonedTimeOut (180); // eliminaron: después del tiempo de eliminar el tiempo de tiempo excede el tiempo de eliminariDonedtimeOut, ya sea reciclar conexiones no utilizadas (ausentes) (el valor predeterminado es falso, ajustado a verdadero) //data_source.setRemoveAbaBaBaBaBaDonMaintenance(RemoVeAbandonMaintenance); Data_source.setRemoveAbandonedonBorrow (verdadero); // Test WhipleIdle Data_source.settestonreturn (true); // testOnreturn data_source.settestonreturn (true); // setRemoveAbandonedonMaintenance data_source.setRemoVeABLEAnedonMaintening (verdadero); // registrar log data_source.setLogAbandoned (true); // setAddress envío automático data_source.setdefaultAutOcommit (true); // data_source.setenableAutOcommitonreturn (true); System.out.println ("Complete la configuración de parámetros de la base de datos de la base de datos Data_source !!"); /*try {class.forname (controlador); System.out.println ("Cargar el éxito del controlador JDBC"); } Catch (ClassNotFoundException e) {// logger.error ("no puede cargar el controlador JDBC", e); System.out.println ("no puede cargar el controlador JDBC:" + E); } Finalmente {}*/} // privado estático final de ThreadLocal <Enection> Connection_Holder = new ThreadLocal <Enection> (); /*** Get Database Connection*/public static Connection getConnection () {Connection conn = Connection_holder.get (); // 1 if (conn == null) {try {// conn = drivermanager.getConnection (url, username, contraseña); conn = data_source.getConnection (); System.out.println ("Obtener el éxito de la conexión"); } Catch (Sqlexception e) {// logger.error ("Obtener falla de conexión", e); System.out.println ("Obtener falla de conexión:" + e); } Finalmente {/*System.out.println ("Conexión mínima inactiva minidle ="+data_source.getminidle ()); System.out.println ("Conexión maxidle maxidle ="+data_source.getmaxidle ()); System.out.println ("Número máximo de conexiones maxtotal ="+data_source.getMaxToTal ()); System.out.println ("tamaño inicial inicialSize ="+data_source.getInitialSize ()); System.out.println ("Tiempo de espera de espera maxWaitmillis ="+(data_source.getmaxwaitmillis ()/1000)); System.out.println ("Get Active Connections getNumactive () ="+data_source.getNumactive ()); System.out.println ("Obtenga el número de conexiones getNumidle ="+data_source.getNumIdle ());*/ conexión_holder.set (Conn); }} return Conn; }/ *** Cierre la conexión de la base de datos*/ public static void CloseConnection () {Connection conn = Connection_holder.get (); // 1 if (conn! = Null) {try {conn.close (); System.out.println ("Cerrar el éxito de la conexión"); } Catch (Sqlexception e) {// logger.error ("falla de conexión de cierre", e); System.out.println ("Cerrar falla de conexión:" + e); tirar nueva runtimeException (e); } Finalmente {Connection_Holder.Remove (); }}} // Realizar operaciones de base de datos public static sincronizado Void Update (int Thlsh, String ltnr) {Conexy Conn = getConnection (); if (conn == null) {system.out.println ("la conexión () en el método de actualización es nulo!"); } PreparpentStatement pstmt = null; System.out.println ("¡Actualizar inicio!"); int ltlsh = 0; Pruebe {// String sql = "Update Mensaje SET content =? Where id =?"; // string sql1 = "seleccione LTLSH de T_ZXTHLSK donde lsh =?"; Cadena sql = "actualizar t_wx_ltnrk b set b.ltnr =? Where b.lsh ="+ "(seleccione A.LTLSH de T_ZXTHLSK A Where A.LSH =?)"; System.out.println ("La instrucción SQL actualizada es: SQL->"+SQL); pstmt = conn.preparestatement (sql); pstmt.setblob (1, new bytearrayInputStream (ltnr.getBytes ())); pstmt.setInt (2, thlsh); /*pstmt.setString(1, "Esta es la prueba DBCP2 2222"); pstmt.setInt (2, 6);*/if (pstmt.executeupdate ()> 0) {//system.out.println("Update los datos con id = 1 correctamente! "); System.out.println ("Actualice los datos de contenido de chat de thlsh ="+thlsh+"con éxito!/N El contenido de chat es:"+ltnr); } //conn.commit (); /* while(rs1.next ()) {ltlsh = rs1.getInt ("ltlsh"); System.out.println ("Consulte el número de flujo de chat con éxito, el número de flujo de chat es ltlsh->"+ltlsh); }*///pstmt.setstring(1, "Excelente actualización de contenido1"); //pstmt.setint(2, 1); //pstmt.setblob(1, new bytearrayInputStream ("12345 China" .getBytes ())); //pstmt.setint(2, 76732); /*if(pstmt.executeUpdate ()> 0) {//system.out.println("Update Data con id = 1 exitoso! "); System.out.println ("Actualizar datos con id = 76732 exitoso!"); } conn.commit ();*/ system.out.println ("actualizar t_wx_ltnrk éxito"); } Catch (Sqlexception e) {//logger.error("query Entity List Fails ", e); System.out.println ("Actualizar Data Exception Connection ="+Conn); System.out.println ("actualizar t_wx_ltnrk falla:" + e); tirar nueva runtimeException (e); } finalmente {// Closeconnection (); // Closeconnection (); if (pstmt! = null) {try {pstmt.close (); } Catch (Sqlexception e) {// TODO BLOCK AUTO GENERADO E.PRINTSTACKTRACE (); System.out.println ("Preparado Fallado"); }} if (conn! = null) {try {conn.close (); } Catch (Sqlexception e) {// TODO BLOCK AUTO GENERADO E.PRINTSTACKTRACE (); }} // Eliminar la conexión en el hilo. Si no se elimina la conexión, la conexión obtenida se cerrará. La operación de datos no se puede realizar. Connection_holder.remove (); // Closeconnection (); } // return EntityList; }} 9. Se crea el grupo de conexión de base de datos básica. Después de eso, puede simular la conexión de la base de datos a través del método de actualización de DatabaseHelper para simular la operación de obtener conexiones de base de datos y realizar operaciones de datos de acuerdo con sus propias necesidades.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.