Download des Abhängigkeitspakets: http://xiazai.VeVB.COm/201407/tools/java-db-dependency(VeVB.COm).rar
Quellcode der Datenbankverbindungsklasse:
Paket com.itjh.javaUtil;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.commons.dbcp.ConnectionFactory;import org.apache.commons.dbcp.DriverManagerConnectionFactory;import org.apache.commons.dbcp.PoolableConnectionFactory;import org.apache.commons.dbcp.PoolingDriver;import org.apache.commons.dbutils.DbUtils;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.MapListHandler;import org.apache. commons.pool.ObjectPool;import org.apache.commons.pool.impl.GenericObjectPool;/** * Umfangreiche Klasse für die Verbindung zur Datenbank. </br> * Hängt von den JAR-Paketen ab: commons.dbcp-1.4, commons.dbutils-1.3, commons.pool-1.5.4 Paket. * * @author Song Lijun* @date 3. Juli 2014*/public class DBUtil {private String dri = null;private String url = null;private String username = null;private String passwort = null;private String poolName = null; / Verbindungspoolname private ObjectPool ConnectionPool = null; // Verbindungspool // Entsprechende geplante Abfrageklasse private QueryThread queryThread = null; Funktion: Konstruktor * * @author Song Lijun * @date 3. Juli 2014 * @param dri * Vollständiger Klassenname des Treibers, zum Beispiel: com.mysql.jdbc.Driver. * @param url * Datenbank-URL-Verbindung, zum Beispiel: * „jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8“ * @param userName * Datenbankbenutzername, zum Beispiel: root * @param-Passwort * Datenbank-Passwort, zum Beispiel: abc * @param poolName * Der Name des erstellten Datenbankverbindungspools, z. B. mypool. Beachten Sie, dass dieser Name für einen Webcontainer nicht wiederholt werden darf. */public DBUtil(String dri, String url, String userName, String password,String poolName) {this.dri = dri;this.url = url;this.username = userName;this.password = password;this.poolName = poolName ;}/** * SQL ausführen. * * @param conn * Connection * @param pstm * PreparedStatement * @return int Die betroffene Zeile, die der Ausführung von SQL entspricht. * @throws SQLException * @author Song Lijun* @date 3. Juli 2014*/public intexecute(Connection conn, PreparedStatement pstm)throws SQLException {try {return pstm.executeUpdate();} schließlich {Close(conn);} } /** * SQL abfragen. * * @param conn * Connection * @param pstm * PreparedStatement * @return List<Map<String,Object>> Abfrageergebnismenge * @throws SQLException * @author Song Lijun * @date 3. Juli 2014 */public List <Map <String, Object>> query(Connection conn,PreparedStatement pstm) löst eine SQLException {try {return resultSetToList(pstm.executeQuery());} Finally {Close(conn);}}/** * Funktion: ResultSet wird in List<Map<String,Object>> konvertiert * * * @param rs * ResultSet Originaldatensatz * @ return List<Map<String,Object>> * @throws java.sql.SQLException * @author Song Lijun* @date 3. Juli 2014*/private List<Map<String, Object>> resultSetToList(ResultSet rs)throws java.sql.SQLException {if (rs == null)return Collections.EMPTY_LIST;ResultSetMetaData md = rs.getMetaData() ; / / Rufen Sie die Strukturinformationen der Ergebnismenge (rs) ab, z. B. die Anzahl der Felder, Feldnamen usw. int ColumnCount = md.getColumnCount(); // Gibt die Anzahl der Spalten in diesem ResultSet-Objekt zurück 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, Object>(columnCount);for (int i = 1; i <= columnsCount; i++) {rowData.put(md.getColumnName(i), rs.getObject(i));}list.add(rowData);}return list;}/** * SQL-Anweisung abfragen. * * @param sql * Die ausgeführte SQL-Anweisung * @return List<Map<String,Object>> * @throws SQLException * @author Song Lijun* @date 3. Juli 2014 */public List<Map<String, Object >> query(String sql) throws SQLException {List<Map<String, Object>> results = null;Connection conn = null;try {conn = getConnection();QueryRunner qr = new QueryRunner();results = qr.query(conn, sql, new MapListHandler());} schließlich {Close(conn);}return results;}/** * Abfrage von SQL basierend auf Parameteranweisung * * @param sql * SQL-Anweisung * @param param * Parameter * @return List<Map<String,Object>> * @throws SQLException * @author Song Lijun* @date 3. Juli 2014*/public List<Map<String, Object>> query(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();} schließlich {Close (conn);}return results;}/** * SQL-Anweisung ausführen* * @param sql * Die ausgeführte SQL-Anweisung* @return Betroffene Zeilen* @throws Ausnahme * @author Song Lijun* @date 3. Juli 2014*/public intexecute(String sql) throws Exception {Connection conn = getConnection();int rows = 0;try {QueryRunner qr = new QueryRunner(); rows = qr.update(conn, sql);} schließlich {Close(conn);}return rows;}/** * Führen Sie die SQL-Anweisung mit Parametern aus* * @param sql * Die ausgeführte SQL-Anweisung* @param params * Parameter* @return Gibt die betroffenen Zeilen zurück* @throws Exception * @ Autor Song Lijun* @date 3. Juli 2014*/public intexecute(String sql, Object[] params) löst eine Ausnahme aus {Connection conn = getConnection();int rows = 0;try {QueryRunner qr = new QueryRunner();rows = qr.update(conn, sql, params);} schließlich {Close(conn);}return rows;}/ ** * Verbindung schließen * * @param conn * @throws SQLException * @author Song Lijun * @date 3. Juli 2014*/public void Close(Connection conn) throws SQLException {if (conn != null) {conn.close();}DbUtils.closeQuietly(conn);}/** * Starten Sie den Verbindungspool* * @ Autor Song Lijun* @Datum 3. Juli 2014*/private void StartPool() {try {Class.forName(dri);} Catch (ClassNotFoundException e1) {e1.printStackTrace();}if (connectionPool != null) {ShutdownPool();}try {connectionPool = new GenericObjectPool(null);ConnectionFactory ConnectionFactory = new DriverManagerConnectionFactory(url, username, password);PoolableConnectionFactory poolableConnectionFactory = neu PoolableConnectionFactory(connectionFactory, ConnectionPool, null, "SELECT 1", false, true);Class.forName("org.apache.commons.dbcp.PoolingDriver");PoolingDriver drivers = (PoolingDriver) DriverManager.getDriver("jdbc:apache: commons:dbcp:");driver.registerPool(poolName, poolableConnectionFactory.getPool());} Catch (Exception e) {e.printStackTrace();}//Öffnen Sie das Abfrageprogramm queryThread = new QueryThread(this);queryThread.start();}/** * Schließen Sie den Verbindungspool * * @author Song Lijun* @date 3. Juli 2014*/private void ShutdownPool() {try {PoolingDriver drivers = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");driver.closePool(poolName);//Geplante Abfrage schließen queryThread.setStartQuery(false);} Catch (SQLException e) {e.printStackTrace() ;}}/** * Verbindung herstellen* * @return * @author Song Lijun* @date 3. Juli 2014*/öffentliche synchronisierte Verbindung getConnection() {Connection conn = null;try {if (connectionPool == null)StartPool();conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:"+ poolName) ;} Catch (Exception e) {e.printStackTrace();}return conn;}}/** * Wenn der Verbindungspool gestartet wird, fragt er die Datenbank automatisch regelmäßig ab, um ein Timeout der Datenbankverbindung zu verhindern. * * @author Song Lijun* @date 3. Juli 2014*/class QueryThread erweitert Thread {private DBUtil dbUtil = null;//Ob die Abfrage privat aktiviert werden soll boolean startQuery = true;/** * Funktion: Entsprechende Datenbankverbindung. * * @author Song Lijun* @date 3. Juli 2014* @param dbUtil * Datenbankverbindung*/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();} schließlich {try {Thread.sleep(120000);} Catch (InterruptedException e) {e.printStackTrace(); }}}}public void setStartQuery(boolean startQuery) {// System.out.println("startQuery close:"+startQuery);this.startQuery = startQuery;}}