国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java常用工具類之數(shù)據(jù)庫連接類(可以連接多種數(shù)據(jù)庫)

2019-11-26 15:28:50
字體:
來源:轉載
供稿:網(wǎng)友

依賴包下載:http://xiazai.VeVB.COm/201407/tools/java-db-dependency(VeVB.COm).rar

數(shù)據(jù)庫連接類源碼:

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;/** * 連接數(shù)據(jù)庫的綜合類。</br> * 依賴jar包:commons.dbcp-1.4,commons.dbutils-1.3,commons.pool-1.5.4包。 *  * @author 宋立君 * @date 2014年07月03日 */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;	/**	 * 功能:構造函數(shù)	 * 	 * @author 宋立君	 * @date 2014年07月03日	 * @param dri	 *      驅動全類名,例如:com.mysql.jdbc.Driver。	 * @param url	 *      數(shù)據(jù)庫url連接,例如:	 *      "jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"	 * @param userName	 *      數(shù)據(jù)庫用戶名,例如:root	 * @param password	 *      數(shù)據(jù)庫密碼,例如:abc	 * @param poolName	 *      創(chuàng)建的數(shù)據(jù)庫連接池的名稱,例如mypool,注意一個web容器此名稱不能重復。	 */	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;	}	/**	 * 執(zhí)行sql。	 * 	 * @param conn	 *      連接	 * @param pstm	 *      PreparedStatement	 * @return int 執(zhí)行sql對應的影響行。	 * @throws SQLException	 * @author 宋立君	 * @date 2014年07月03日	 */	public int execute(Connection conn, PreparedStatement pstm)			throws SQLException {		try {			return pstm.executeUpdate();		} finally {			Close(conn);		}	}	/**	 * 查詢sql。	 * 	 * @param conn	 *      連接	 * @param pstm	 *      PreparedStatement	 * @return List<Map<String,Object>> 查詢的結果集	 * @throws SQLException	 * @author 宋立君	 * @date 2014年07月03日	 */	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 原始數(shù)據(jù)集	 * @return List<Map<String,Object>>	 * @throws java.sql.SQLException	 * @author 宋立君	 * @date 2014年07月03日	 */	private List<Map<String, Object>> resultSetToList(ResultSet rs)			throws java.sql.SQLException {		if (rs == null)			return Collections.EMPTY_LIST;		ResultSetMetaData md = rs.getMetaData(); // 得到結果集(rs)的結構信息,比如字段數(shù)、字段名等		int columnCount = md.getColumnCount(); // 返回此 ResultSet 對象中的列數(shù)		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	 *      被執(zhí)行的sql語句	 * @return List<Map<String,Object>>	 * @throws SQLException	 * @author 宋立君	 * @date 2014年07月03日	 */	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;	}	/**	 * 根據(jù)參數(shù)查詢sql語句	 * 	 * @param sql	 *      sql語句	 * @param param	 *      參數(shù)	 * @return List<Map<String,Object>>	 * @throws SQLException	 * @author 宋立君	 * @date 2014年07月03日	 */	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;	}	/**	 * 執(zhí)行sql語句	 * 	 * @param sql	 *      被執(zhí)行的sql語句	 * @return 受影響的行	 * @throws Exception	 * @author 宋立君	 * @date 2014年07月03日	 */	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;	}	/**	 * 執(zhí)行含參數(shù)的sql語句	 * 	 * @param sql	 *      被執(zhí)行的sql語句	 * @param params	 *      參數(shù)	 * @return 返回受影響的行	 * @throws Exception	 * @author 宋立君	 * @date 2014年07月03日	 */	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;	}	/**	 * 關閉連接	 * 	 * @param conn	 * @throws SQLException	 * @author 宋立君	 * @date 2014年07月03日	 */	public void Close(Connection conn) throws SQLException {		if (conn != null) {			conn.close();		}		DbUtils.closeQuietly(conn);	}	/**	 * 啟動連接池	 * 	 * @author 宋立君	 * @date 2014年07月03日	 */	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();	}	/**	 * 關閉連接池	 * 	 * @author 宋立君	 * @date 2014年07月03日	 */	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 宋立君	 * @date 2014年07月03日	 */	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;	}}/** * 當連接池啟動后會自動定時查詢數(shù)據(jù)庫,防止數(shù)據(jù)庫連接超時。 *  * @author 宋立君 * @date 2014年07月03日 */class QueryThread extends Thread {	private DBUtil dbUtil = null;	// 是否開啟查詢	private boolean startQuery = true;	/**	 * 功能:對應的數(shù)據(jù)庫連接。	 * 	 * @author 宋立君	 * @date 2014年07月03日	 * @param dbUtil	 *      數(shù)據(jù)庫連接	 */	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;	}}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 富锦市| 阳朔县| 卓尼县| 嘉禾县| 图木舒克市| 兴化市| 宜昌市| 巍山| 都江堰市| 奉新县| 商河县| 河北区| 阿拉善右旗| 浦北县| 北碚区| 昂仁县| 高要市| 灌云县| 红桥区| 舞阳县| 苏尼特左旗| 四子王旗| 临城县| 封丘县| 瓮安县| 额济纳旗| 凤冈县| 潼关县| 旬邑县| 惠来县| 舟曲县| 西充县| 吴旗县| 象州县| 岚皋县| 晋江市| 巨野县| 尼木县| 铜鼓县| 化州市| 横山县|