Téléchargement du package de dépendances : http://xiazai.VeVB.COm/201407/tools/java-db-dependency(VeVB.COm).rar
Code source de la classe de connexion à la base de données :
package com.itjh.javaUtil; importer java.sql.Connection; importer java.sql.DriverManager; importer java.sql.PreparedStatement; importer java.sql.ResultSet; importer java.sql.ResultSetMetaData; importer java.sql.SQLException; importer java.util.ArrayList;importation java.util.Collections; importer java.util.HashMap; importer java.util.List; importer java.util.Map; importer org.apache.commons.dbcp.ConnectionFactory; importer org.apache.commons.dbcp.DriverManagerConnectionFactory; importer org.apache.commons.dbcp.PoolableConnectionFactory;importation org.apache.commons.dbcp.PoolingDriver; importer org.apache.commons.dbutils.DbUtils; importer org.apache.commons.dbutils.QueryRunner; importer org.apache.commons.dbutils.handlers.MapListHandler; importer org.apache. commons.pool.ObjectPool;importation org.apache.commons.pool.impl.GenericObjectPool;/** * Classe complète pour la connexion à la base de données. </br> * Dépend des packages jar : commons.dbcp-1.4, commons.dbutils-1.3, commons.pool-1.5.4 package. * * @author Song Lijun* @date 3 juillet 2014*/public class DBUtil {private String dri = null;private String url = null;private String username = null;private String password = null;private String poolName = null / / Nom du pool de connexions private ObjectPool connectionPool = null; // Pool de connexions // Classe de requête planifiée correspondante private QueryThread queryThread = null /** *; Fonction : Constructeur * * @author Song Lijun * @date 3 juillet 2014 * @param dri * Nom de classe complet du pilote, par exemple : com.mysql.jdbc.Driver. * @param url * Connexion à l'url de la base de données, par exemple : * "jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8" * @param userName * Nom d'utilisateur de la base de données, par exemple : root * @param password * Mot de passe de la base de données, par exemple : abc * @param poolName * Nom du pool de connexions à la base de données créé, tel que mypool. Notez que ce nom ne peut pas être répété pour un conteneur Web. */public DBUtil (String dri, String url, String userName, String password, String poolName) {this.dri = dri;this.url = url;this.username = userName;this.password = mot de passe;this.poolName = poolName ;}/** * Exécuter SQL. * * @param conn * Connection * @param pstm * PreparedStatement * @return int La ligne affectée correspondant à l'exécution de SQL. * @throws SQLException * @author Song Lijun* @date 3 juillet 2014*/public int execute(Connection conn, PreparedStatement pstm)throws SQLException {try {return pstm.executeUpdate();} enfin {Close(conn);} } /** * Requête SQL. * * @param conn * Connexion * @param pstm * PreparedStatement * @return List<Map<String,Object>> Ensemble de résultats de requête * @throws SQLException * @author Song Lijun * @date 3 juillet 2014 */public List <Map <String, Object>> requête (Connection conn,PreparedStatement pstm) lance SQLException {try {return resultSetToList(pstm.executeQuery());} enfin {Close(conn);}}/** * Fonction : ResultSet est converti en List<Map<String,Object>> * * * @param rs * Ensemble de données d'origine ResultSet * @ return List<Map<String,Object>> * @throws java.sql.SQLException * @author Song Lijun* @date 3 juillet 2014*/private List<Map<String, Object>> resultSetToList(ResultSet rs)throws java.sql.SQLException {if (rs == null)return Collections.EMPTY_LIST;ResultSetMetaData md = rs.getMetaData() ; / Récupère les informations structurelles du jeu de résultats (rs), telles que le nombre de champs, les noms de champs, etc. int columnCount = md.getColumnCount(); // Renvoie le nombre de colonnes dans cet objet ResultSet List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();Map<String, Object> rowData = new HashMap<String, Object>();while (rs.next()) {rowData = new HashMap<String, Objet>(columnCount);for (int i = 1; i <= columnCount; i++) {rowData.put(md.getColumnName(i), rs.getObject(i));}list.add(rowData);}return list;}/** * Interroger l'instruction SQL. * * @param sql * L'instruction SQL exécutée * @return List<Map<String,Object>> * @throws SQLException * @author Song Lijun* @date 3 juillet 2014 */public List<Map<String, Object >> requête (String sql) lance SQLException {List<Map<String, Object>> results = null;Connection conn = null;try {conn = getConnection();QueryRunner qr = new QueryRunner();results = qr.query(conn, sql, new MapListHandler());} enfin {Close(conn);}renvoie les résultats;}/** * Requête SQL basée sur instruction de paramètres * * @param sql * instruction sql * @param param * paramètre * @return List<Map<String,Object>> * @throws SQLException * @author Song Lijun* @date 3 juillet 2014*/public List<Map<String, Object>> requête (String sql, Object param)throws SQLException {List < Map<String, Object>> results = null;Connection conn = null;try {conn = getConnection();QueryRunner qr = new QueryRunner();results = (List<Map<String, Object>>) qr.query(conn, sql, param,new MapListHandler());} catch (SQLException e) {e.printStackTrace();} enfin {Fermer (conn);}retourner les résultats;}/** * Exécuter l'instruction SQL* * @param sql * L'instruction SQL exécutée* @return Lignes concernées* @throws Exception * @author Song Lijun* @date 3 juillet 2014*/public int execute(String sql) throws Exception {Connection conn = getConnection();int rows = 0;try {QueryRunner qr = new QueryRunner(); lignes = qr.update(conn, sql);} enfin {Close(conn);}return rows;}/** * Exécuter l'instruction SQL avec des paramètres* * @param sql * L'instruction SQL exécutée* @param params * Paramètres* @return Renvoie les lignes affectées* @throws Exception * @ auteur Song Lijun* @date 3 juillet 2014*/public int exécuter (String sql, Object[] params) lève une exception {Connection conn = getConnection();int rows = 0;try {QueryRunner qr = new QueryRunner();rows = qr.update(conn, sql, params);} enfin {Close(conn);}return rows;}/ ** * Fermez la connexion * * @param conn * @throws SQLException * @author Song Lijun * @date 3 juillet 2014*/public void Close(Connection conn) throws SQLException {if (conn != null) {conn.close();}DbUtils.closeQuietly(conn);}/** * Démarrez le pool de connexions* * @ auteur Song Lijun* @date 3 juillet 2014*/private void StartPool() {try {Class.forName(dri);} catch (ClassNotFoundException e1) {e1.printStackTrace();}if (connectionPool != null) {ShutdownPool();}essayez {connectionPool = new GenericObjectPool(null);ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(url, nom d'utilisateur, mot de passe);PoolableConnectionFactory poolableConnectionFactory = nouveau PoolableConnectionFactory(connectionFactory, connectionPool, null, "SELECT 1", false,true);Class.forName("org.apache.commons.dbcp.PoolingDriver");PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache: commons:dbcp:");driver.registerPool(poolName, poolableConnectionFactory.getPool());} catch (Exception e) {e.printStackTrace();}//Ouvrez le programme de requête queryThread = new QueryThread(this);queryThread.start();}/** * Fermez le pool de connexions * * @auteur Song Lijun* @date 3 juillet 2014*/private void ShutdownPool() {try {PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");driver.closePool(poolName);//Fermer la requête planifiée queryThread.setStartQuery(false);} catch (SQLException e) {e.printStackTrace() ;}}/** * Obtenir une connexion* * @return * @author Song Lijun* @date 3 juillet 2014*/public synchronisé Connexion getConnection() {Connection conn = null;try {if (connectionPool == null)StartPool();conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:"+ poolName) ;} catch (Exception e) {e.printStackTrace();}return conn;}}/** * Lorsque le pool de connexions est démarré, il interroge automatiquement et régulièrement la base de données pour éviter que la connexion à la base de données n'expire. * * @author Song Lijun* @date 3 juillet 2014*/class QueryThread extends Thread {private DBUtil dbUtil = null;//S'il faut activer la requête private boolean startQuery = true;/** * Fonction : connexion à la base de données correspondante. * * @author Song Lijun* @date 3 juillet 2014* @param dbUtil * Connexion à la base de données*/public QueryThread(DBUtil dbUtil) {this.dbUtil = dbUtil;}public void run() {while (true) {try { if (startQuery) {this.dbUtil.query("select 1");}// System.out.println(startQuery+" 123");} catch (Exception e) {e.printStackTrace();} enfin {try {Thread.sleep(120000);} catch (InterruptedException e) {e.printStackTrace(); }}}}public void setStartQuery(boolean startQuery) {// System.out.println("startQuery fermer : "+startQuery);this.startQuery = startQuery;}}