依存関係パッケージのダウンロード: http://xiazai.VeVB.COm/201407/tools/java-db-dependency(VeVB.COm).rar
データベース接続クラスのソースコード:
パッケージ 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;インポート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;インポート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;インポートorg.apache.commons.pool.impl.GenericObjectPool;/** * データベースに接続するための包括的なクラス。 </br> * jar パッケージに依存します: commons.dbcp-1.4、commons.dbutils-1.3、commons.pool-1.5.4 パッケージ。 * * @author Song Lijun* @date July 3, 2014*/public class DBUtil {private String dri = null;private String url = null;private String username = null;private String passwd = null; / 接続プール名 private ObjectPool connectionPool = null; // 接続プール // 対応するスケジュールされたクエリ クラス private QueryThread queryThread = null;関数: コンストラクター * * @author Song Lijun * @date July 3, 2014 * @param dri * ドライバーの完全なクラス名 (例: com.mysql.jdbc.Driver)。 * @param url * データベース URL 接続、例: * "jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8" * @param userName * データベース ユーザー名、例: root * @param パスワード * データベース パスワード、例: abc * @param poolName *作成されたデータベース接続プールの名前 (mypool など)。この名前は Web コンテナに対して繰り返すことができないことに注意してください。 */public DBUtil(String dri, String url, String userName, String パスワード,String poolName) {this.dri = dri;this.url = url;this.username = ユーザー名;this.password = パスワード;this.poolName = プール名;}/** * SQL を実行します。 * * @param conn * Connection * @param pstm * PreparedStatement * @return int SQL の実行に対応する影響を受ける行。 * @throws SQLException * @author Song Lijun* @date July 3, 2014*/public intexecute(Connection conn, PreparedStatement pstm)throws SQLException {try {return pstm.executeUpdate();}finally {Close(conn);} } /** * SQL をクエリします。 * * @param conn * Connection * @param pstm * PreparedStatement * @return List<Map<String,Object>> クエリ結果セット * @throws SQLException * @author Song Lijun * @date July 3, 2014 */public List <Map <String, Object>> query(Connection conn,PreparedStatement pstm) throws SQLException {try {return resultSetToList(pstm.executeQuery());}finally {Close(conn);}}/** * 関数: ResultSet は List<Map<String,Object>> に変換されます * * * @param rs * ResultSet 元のデータセット * @ return List<Map<String,Object>> * @throws java.sql.SQLException * @author Song Lijun* @date 2014 年 7 月 3 日*/private List<Map<String, Object>> resultSetToList(ResultSet rs)throws java.sql.SQLException {if (rs == null)return Collections.EMPTY_LIST;ResultSetMetaData md = rs.getMetaData() ; / フィールド数、フィールド名など、結果セット (rs) の構造情報を取得します。 int columnCount = md.getColumnCount(); // この 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, Object>(columnCount);for (int i = 1; i <= columnCount; i++) {rowData.put(md.getColumnName(i), rs.getObject(i));}list.add(rowData);}return list;}/** * SQL ステートメントをクエリします。 * * @param sql * 実行された SQL ステートメント * @return List<Map<String,Object>> * @throws SQLException * @author Song Lijun* @date July 3, 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());}finally {Close(conn);}return results;}/** * に基づくクエリ SQLパラメータステートメント * * @param sql * sql ステートメント * @param param * パラメータ * @return List<Map<String,Object>> * @throws SQLException * @author Song Lijun* @date July 3, 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();}finally {Close (conn);}結果を返す;}/** * SQL ステートメントを実行* * @param sql * 実行された SQL ステートメント* @return 影響を受ける行* @throws Exception * @author Song Lijun* @date July 3, 2014*/public intexecute(String sql) throws Exception {Connection conn = getConnection();int rows = 0;try {QueryRunner qr = new QueryRunner() 行 = qr.update(conn, sql);} {Close(conn);}return rows;}/** * パラメーターを指定して SQL ステートメントを実行します* * @param sql * 実行された SQL ステートメント* @param params * パラメーター* @return 影響を受ける行を返します* @throws Exception * @著者 Song Lijun* @日付 2014 年 7 月 3 日*/public intexecute(String sql, Object[] params) throws Exception {Connection conn = getConnection();int rows = 0;try {QueryRunner qr = new QueryRunner();rows = qr.update(conn, sql, params);}finally {Close(conn);}return rows;}/ ** * 接続を閉じます * * @param conn * @throws SQLException * @author Song Lijun * @date 2014 年 7 月 3 日*/public void Close(Connection conn) throws SQLException {if (conn != null) {conn.close();}DbUtils.closeQuietly(conn);}/** * 接続プールを開始します* * @著者 Song Lijun* @date July 3, 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, ユーザー名, パスワード);PoolableConnectionFactory poolableConnectionFactory = 新しい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(プール名, poolableConnectionFactory.getPool());} catch (Exception e) {e.printStackTrace();}//クエリ プログラムを開きます queryThread = new QueryThread(this);queryThread.start();}/** * 接続プールを閉じます* * @author Song Lijun* @date July 3, 2014*/private void ShutdownPool() {try {PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");driver.closePool(poolName);//スケジュールされたクエリを閉じる queryThread.setStartQuery(false);} catch (SQLException e) {e.printStackTrace() ;}}/** * 接続を取得* * @return * @author Song Lijun* @date 2014 年 7 月 3 日*/public synchronized Connection getConnection() {Connection conn = null;try {if (connectionPool == null)StartPool();conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:"+ poolName) ;} catch (例外 e) {e.printStackTrace();}return conn;}}/** *接続プールが開始されると、データベース接続がタイムアウトになるのを防ぐために、データベースに定期的に自動的にクエリが実行されます。 * * @author Song Lijun* @date July 3, 2014*/class QueryThread extends Thread {private DBUtil dbUtil = null;//クエリを有効にするかどうか private boolean startQuery = true;/** * 機能: 対応するデータベース接続。 * * @author Song Lijun* @date July 3, 2014* @param dbUtil * データベース接続*/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();}finally {try {Thread.sleep(120000);} catch (InterruptedException e) {e.printStackTrace();} }}}}public void setStartQuery(boolean startQuery) {// System.out.println("startQuery shut:"+startQuery);this.startQuery = startQuery;}}