package 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; public class DBUtil { private String dri = null; private String url = null; private String username = null; private String password = null; private String poolName = null; private ObjectPool connectionPool = null; private QueryThread queryThread = null; 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; } public int execute(Connection conn, PreparedStatement pstm) throws SQLException { try { return pstm.executeUpdate(); } finally { Close(conn); } } public List<Map<String, Object>> query(Connection conn, PreparedStatement pstm) throws SQLException { try { return resultSetToList(pstm.executeQuery()); } finally { Close(conn); } } private List<Map<String, Object>> resultSetToList(ResultSet rs) throws java.sql.SQLException { if (rs == null) return Collections.EMPTY_LIST; ResultSetMetaData md = rs.getMetaData(); int columnCount = md.getColumnCount(); 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; } 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; } 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); } return results; } public int execute(String sql) throws Exception { Connection conn = getConnection(); int rows = 0; try { QueryRunner qr = new QueryRunner(); rows = qr.update(conn, sql); } finally { Close(conn); } return rows; } public int execute(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; } public void Close(Connection conn) throws SQLException { if (conn != null) { conn.close(); } DbUtils.closeQuietly(conn); } 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 = new 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(); } queryThread = new QueryThread(this); queryThread.start(); } private void ShutdownPool() { try { PoolingDriver driver = (PoolingDriver) DriverManager .getDriver("jdbc:apache:commons:dbcp:"); driver.closePool(poolName); queryThread.setStartQuery(false); } catch (SQLException e) { e.printStackTrace(); } } public synchronized Connection getConnection() { Connection conn = null; try { if (connectionPool == null) StartPool(); conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:" + poolName); } catch (Exception e) { e.printStackTrace(); } return conn; } } class QueryThread extends Thread { private DBUtil dbUtil = null; private boolean startQuery = true; public QueryThread(DBUtil dbUtil) { this.dbUtil = dbUtil; } public void run() { while (true) { try { if (startQuery) { this.dbUtil.query("select 1"); } } catch (Exception e) { e.printStackTrace(); } finally { try { Thread.sleep(120000); } catch (InterruptedException e) { e.printStackTrace(); } } } } public void setStartQuery(boolean startQuery) { this.startQuery = startQuery; } }
转载请注明原文地址: https://www.6miu.com/read-17370.html