En développement, nous utilisons souvent des pools de connexions de base de données, tels que les pools de connexion de la base de données DBCP. Ce chapitre expliquera l'utilisation simple des pools de connexion de la bibliothèque de base de données DBCP de connexion Java.
Outils de développement myeclipse2014
1. Créez d'abord un projet Web. J'ai nommé le nom du projet TestJDBC. J'ai besoin d'un fichier de configuration avec web.xml pour configurer le servlet. Une fois la création terminée, la structure du projet est la suivante:
2. Créez un package. Le nom du package que j'ai créé est com.szkingdom.db
3. Créez la classe d'aide Casttutil, le code est le suivant:
Package com.szkingdom.db; / ** * Créé par Jack le 2015/12/26. * Transformation Operation Tool Class * / public class CastUtil {/ * * Convert en chaîne Type * * / public static String CastString (objet obj) {return castutil.castString (obj, ""); } / * * Convertir en type de chaîne (fournissant une valeur par défaut) * * / public static String CastString (objet obj, string defaultValue) {return obj! = Null? String.valueof (obj): defaultValue; } / * * Convertir en double type * * / public static double castDouble (objet obj) {return CastDouble (obj, (double) 0); } / * * Convertir en double type (valeur par défaut fournie) * * / public static double castDouble (objet obj, double defaultValue) {double doubleValue = defaultValue; if (obj! = null) {String strValue = CastString (obj); if (stringUtil.isnotempty (strValue)) {try {doubleValue = double.parsedouble (strValue); } catch (NumberFormatexception e) {defaultValue = defaultValue; }}} return doubleValue; } / * * Convertir en type long * * / public static long castlong (objet obj) {return CastLong (obj, 0); } / * * Converti en type long (valeur par défaut fournie) * * / public static long castLong (objet 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; }} return longValue; } / * * Convertir en type int * * / public static int casTinT (objet obj) {return CastInt (obj, 0); } / * * Converti en type int (fournissant la valeur par défaut) * * / public static int casTinT (objet 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; }}} return intValue; } / * * Convertir en type booléen * * / public static boolean castboolean (objet obj) {return Castboolean (obj, false); } / * * Convertir en type booléen (fournit la valeur par défaut) * * / public static boolean castboolean (objet obj, boolean defaultValue) {boolean booleanvalue = defaultValue; if (obj! = null) {booleanValue = boolean.parseboolean (CastString (obj)); } return booleanValue; }} 4. Créez un fichier de propriété pour lire la classe d'aide propsutil, le code est le suivant:
Package com.szkingdom.db; import java.io.filenotfoundException; Importer java.io.ioException; import java.io.inputStream; import java.util.properties; / ** * Créé par Jack le 2015/12/26. * Propriétés Classe d'outils de fichiers * / classe publique PropSUtil {// Logger final statique privé = loggerfactory.getLogger (propsUtil.class); / * * Fichier de propriété de chargement * * * / Propriétés statiques publiques LoadProps (String FileName) {Propriétés Properties = NULL; InputStream inputStream = null; essayez {inputStream = Thread.currentThread (). getContextClassOLODOLER (). getResourceAsStream (filename); if (inputStream == NULL) {Throw New FileLoTFoundException (FileName + "Le fichier n'est pas trouvé!"); } properties = new Properties (); Properties.load (InputStream); } catch (ioException e) {//logger.error("load des propriétés défaillance du fichier ", e); System.out.println ("Fail de fichiers Propriétés de charge:" + E); } enfin {if (inputStream! = null) {try {inputStream.close (); } catch (ioException e) {//logger.error("close la défaillance du flux d'entrée ", e); System.out.println ("Fermer la défaillance du flux d'entrée:" + e); }} Return Properties; } / * * Obtenir des attributs de caractères (default est une chaîne vide) * * * / public static String getString (Properties Props, String key) {return getString (Props, key, ""); } / * * Obtenez des attributs de type caractéristique (la valeur par défaut peut être spécifiée) * * / public static string getString (Propriétés accessoires, key string, string defaultValue) {String value = defaultValue; if (props.ContainsKey (key)) {value = props.getProperty (key); } RETOUR-valeur; } / * * Obtenez des attributs de type numérique (par défaut est 0) * * / public static int getInt (Propriétés Props, String key) {return getInt (props, key, 0); } / * * Obtenez l'attribut de type numérique (la valeur par défaut peut être spécifiée) * * / public static int getInt (Propriétés props, key string, int defaultValue) {int value = defaultValue; if (props.ContainsKey (key)) {value = castUtil.castInt (props.getProperty (key)); } RETOUR-valeur; } / * * Obtenez la propriété booléenne (la valeur par défaut est fausse) * * / public static boolean getBoolean (Properties props, string key) {return getboolean (accessoires, key, false); } / * * Obtenez une propriété booléenne (la valeur par défaut peut être spécifiée) * * / public static boolean getboolean (Propriétés Props, clé de chaîne, booléen defaultValue) {Boolean Value = DefaultValue; if (props.containsKey (key)) {value = castUtil.castBoolean (props.getProperty (key)); } RETOUR-valeur; }} 5. Créer une classe d'aide à chaîne StringUtil, le code est le suivant:
Package com.szkingdom.db; / ** * Créé par Jack le 2015/12/26. * String Tool class * / public class stringUtil {/ * * Déterminez si la chaîne est vide * * / public static boolean isEmpty (String str) {if (str! = Null) {str = str.trim (); } // return stringUtils.isempty (str); retour "" .equals (str); } / * * Déterminez si la chaîne n'est pas vide * * / public static boolean isNotempty (String str) {return! ISEmpty (str); }} 6. Créez un fichier de propriété de connexion de base de données dbconfig.properties dans le répertoire SRC
<span style = "Color: # 333333;"> jdbc.Driver = com.mysql.jdbc.Driver jdbc.url = jdbc: mysql: // </span> <span style = "Color: # ff6666; background-Color: rgb (255, 0, 0); "> 127.0.0.1:3306/**** mer
7. Mettez les packages de pot nécessaires dans le répertoire Lib:
8. Créez une classe d'aide à la base de données à l'aide de DBCP
Package com.szkingdom.db; Importer java.io.ByteArrayInputStream; import java.sql.connection; Importer Java.Sql.DiverManager; Importer java.sql.PreparedStatement; import java.sql.resultSet; import java.sql.sqlexception; import java.util.properties; import org.apache.commons.dbcp2.basicDataSource; / ** * Créé par Jack le 2015/12/26. Database Operation Assistant classe * / classe publique DatabaseHelper {// Logger final statique privé = // loggerfactory.getLogger (databaseHelper.class); pilote de chaîne finale statique privé; URL de chaîne finale statique privée; Nom d'utilisateur de chaîne finale statique privée; Mot de passe de chaîne finale statique privé; // Assurez-vous un thread et une connexion, thread-safe static final final threadLocal <connection> connection_holder; // Thread Pool Private Static Final Final BasicDataSource Data_Source; static {connection_holder = new ThreadLocal <Connexion> (); Propriétés conf = propSutil.loadProps ("dbconfig.properties"); Driver = conf.getProperty ("jdbc.driver"); Url = conf.getProperty ("jdbc.url"); Username = conf.getProperty ("jdbc.Username"); Mot de passe = 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 (pilote); Data_source.setUrl (URL); Data_source.setUsername (nom d'utilisateur); Data_source.setpassword (passwrod); // Configuration du paramètre de pool de connexion de la base de données: 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/blog/20924677. //http://blog.csdn.net/kerafan/article/details/50382998 //http://blog.csdn.net/a9529lty/article/details/43021801 /// Définit le même nombre total de connexions idle et empruntées, et peuvent être activées au même nombre de temps idle et d'empruntes, et peuvent être activés au même temps. Data_source.setMextotal (60); // Définissez la taille initiale data_source.setInitialSize (10); // la connexion inactive minimale data_source.setminidle (8); // Data de connexion inactive maximale_source.setMaxidle (16); // Timeout Temps d'attente millisecondes data_source.setMaxWaitMillis (2 * 10000); // seule la connexion actuelle n'est pas valide, créez une autre connexion pour que la requête actuelle utilise data_source.setTestonBorrow (true); // RemoveAbandOnEdTimeout: recyclage des connexions inutilisées (absents) (par défaut est de 300 secondes, ajustée à 180) data_source.setRemoveAbandOnEdTimeout (180); // RemoveAbandonEd: Après le moment de RemoveAbandonEdTimeout, le temps de RemoveAbandonEdTimeout, qu'il s'agisse de recycler des connexions inutilisées (absentes) (par défaut est faux, ajusté à True) //data_source.SetRemoveaBandoneDonMentennenelaide(RemoveaBandonEnKenerenet); Data_source.setRemoveAbandoneDonBorrow (true); // Test WhideIdle Data_Source.SetTestonreturn (true); // testonreturn data_source.setTestonreturn (true); // setRemoveaBandoneDonMaintennefenne Data_Source.SetRemoveAbandoneDonMentennefense (true); // Enregistrer le journal DATA_SOURCE.SetLogAbandonEd (true); // setAddress Automatic Remise Data_Source.SetDefaultAutoCommit (true); // data_source.setEnableAutoComMitonreturn (true); System.out.println ("Complétez le paramètre Réglage du pool de connexion de la base de données data_source !!"); / * essayez {class.forname (pilote); System.out.println ("Chargez le succès du pilote JDBC"); } catch (classNotFoundException e) {// logger.Error ("ne peut pas charger le pilote jdbc", e); System.out.println ("ne peut pas charger le pilote JDBC:" + E); } Enfin {} * /} // Final Final Final Private Final <Connexion> Connection_Holder = new ThreadLocal <Connexion> (); / ** * Obtenez la connexion de la base de données * / Connexion statique publique getConnection () {Connexion Conn = Connection_Holder.get (); // 1 if (Conn == NULL) {try {// Conn = driverManager.getConnection (url, nom d'utilisateur, mot de passe); Conn = data_source.getConnection (); System.out.println ("Get Connection Success"); } catch (sqlexception e) {// logger.error ("obtenir une défaillance de connexion", e); System.out.println ("Obtenir une défaillance de la connexion:" + e); } Enfin {/*System.out.println ("Connexion inactive minimum minidle =" + data_source.getMinIdle ()); System.out.println ("MAXIDLE Connection Maxidle =" + data_source.getMaxidle ()); System.out.println ("Nombre maximum de connexions maxtotal =" + data_source.getMextotal ()); System.out.println ("Initial Size initialSize =" + data_source.getInitialSize ()); System.out.println ("Timeout Temple d'attente MaxwaitMillis =" + (data_source.getMaxWaitMillis () / 1000)); System.out.println ("Get Active Connections getNumActive () =" + data_source.getNumActive ()); System.out.println ("Obtenez le nombre de connexions getNumidle =" + data_source.getnumidle ()); * / connection_holder.set (CONN); }} return conn; } / ** * Fermez la connexion de la base de données * / public static void CloseConnection () {connexion conn = connection_holder.get (); // 1 if (conn! = Null) {try {conn.close (); System.out.println ("Close Connection Success"); } catch (sqlexception e) {// logger.Error ("défaillance de connexion à clôture", e); System.out.println ("Faiche de connexion Close:" + E); Jetez une nouvelle RuntimeException (E); } enfin {connection_holder.remove (); }}} // Effectuer des opérations de base de données publiques statiques synchronisées void Update (int thlsh, string ltnr) {connexion conn = getConnection (); if (conn == null) {System.out.println ("La connexion () dans la méthode de mise à jour est null !!"); } Préparé Pstmt = null; System.out.println ("Mise à jour Start!"); int ltlsh = 0; essayez {// string sql = "messages de mise à jour set contenu =? où id =?"; // String sql1 = "select ltlsh from t_zxthlsk où lsh =?"; String sql = "Update T_WX_ltnrk B set b.ltnr =? Where b.lsh =" + "(sélectionnez a.ltlsh dans t_zxthlsk a où a.lsh =?)"; System.out.println ("L'instruction SQL mise à jour est: SQL ->" + SQL); PSTMT = Conn.Preparestatement (SQL); pstmt.setblob (1, new bytearrayInputStream (ltnr.getBytes ())); pstmt.sentInt (2, Thlsh); /*pstmt.SetString(1, "Il s'agit du test DBCP2 2222"); pstmt.sentInt (2, 6); * / if (pstmt.executeupdate ()> 0) {//system.out.println("update les données avec id = 1 avec succès! "); System.out.println ("Mettez à jour les données de contenu de chat de Thlsh =" + Thlsh + "avec succès le contenu de chat est:" + ltnr); } //conn.Commit (); /* TRANSÉ(RS1.NEXT ()) {ltlsh = rs1.getInt ("ltlsh"); System.out.println ("Interroger le numéro de flux de chat avec succès, le numéro de flux de chat est ltlsh ->" + ltlsh); } * / //pstmt.setstring(1, "Excellent contenu Update1"); //pstmt.setInt(2, 1); //pstmt.setblob(1, nouveau bytearrayInputStream ("12345 Chine" .getBytes ())); //pstmt.setInt(2, 76732); /*if(pstmt.ExecuteUpdate ()> 0) {//system.out.println("Update data with id = 1 réussi! "); System.out.println ("Mettre à jour les données avec id = 76732 réussi!"); } conn.Commit (); * / System.out.println ("Update T_WX_ltnrk Success"); } catch (sqlexception e) {//logger.error("Query la liste des entités ", e); System.out.println ("Mettre à jour la connexion d'exception des données =" + Conn); System.out.println ("Mise à jour T_WX_LTNRK FAILLE:" + E); Jetez une nouvelle RuntimeException (E); } Enfin {// CloseConnection (); // CloseConnection (); if (pstmt! = null) {try {pstmt.close (); } catch (sqlexception e) {// TODO Block de catch généré automatiquement e.printStackTrace (); System.out.println ("PréparetStatement a échoué"); }} if (conn! = null) {try {conn.close (); } catch (sqlexception e) {// TODO Block de catch généré automatiquement e.printStackTrace (); }} // Suppression de la connexion dans le thread. Ne pas le retirer entraînera la fermeture de la connexion. Une fois la connexion fermée, la connexion obtenue est à l'état fermé et l'opération de données ne peut pas être effectuée Connection_Holder.Remove (); // CloseConnection (); } // return EntityList; }} 9. Le pool de connexion de base de données de base est créé. Après cela, vous pouvez simuler la connexion de la base de données via la méthode de mise à jour de la base de données pour simuler le fonctionnement de l'obtention de connexions de base de données et effectuer des opérations de données en fonction de vos propres besoins.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.