最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2014年07月05日 12:52:17   投稿:junjie  
這篇文章主要介紹了java常用工具類之?dāng)?shù)據(jù)庫(kù)連接類,可以連接多種數(shù)據(jù)庫(kù),代碼中包含詳細(xì)注釋,需要的朋友可以參考下

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

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

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ù)庫(kù)的綜合類。</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; // 連接池
	// 對(duì)應(yīng)的定時(shí)查詢類
	private QueryThread queryThread = null;

	/**
	 * 功能:構(gòu)造函數(shù)
	 * 
	 * @author 宋立君
	 * @date 2014年07月03日
	 * @param dri
	 *      驅(qū)動(dòng)全類名,例如:com.mysql.jdbc.Driver。
	 * @param url
	 *      數(shù)據(jù)庫(kù)url連接,例如:
	 *      "jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"
	 * @param userName
	 *      數(shù)據(jù)庫(kù)用戶名,例如:root
	 * @param password
	 *      數(shù)據(jù)庫(kù)密碼,例如:abc
	 * @param poolName
	 *      創(chuàng)建的數(shù)據(jù)庫(kù)連接池的名稱,例如mypool,注意一個(gè)web容器此名稱不能重復(fù)。
	 */
	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對(duì)應(yīng)的影響行。
	 * @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>> 查詢的結(jié)果集
	 * @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 轉(zhuǎn)為L(zhǎng)ist<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(); // 得到結(jié)果集(rs)的結(jié)構(gòu)信息,比如字段數(shù)、字段名等
		int columnCount = md.getColumnCount(); // 返回此 ResultSet 對(duì)象中的列數(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語(yǔ)句。
	 * 
	 * @param sql
	 *      被執(zhí)行的sql語(yǔ)句
	 * @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語(yǔ)句
	 * 
	 * @param sql
	 *      sql語(yǔ)句
	 * @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語(yǔ)句
	 * 
	 * @param sql
	 *      被執(zhí)行的sql語(yǔ)句
	 * @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語(yǔ)句
	 * 
	 * @param sql
	 *      被執(zhí)行的sql語(yǔ)句
	 * @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;
	}

	/**
	 * 關(guān)閉連接
	 * 
	 * @param conn
	 * @throws SQLException
	 * @author 宋立君
	 * @date 2014年07月03日
	 */
	public void Close(Connection conn) throws SQLException {
		if (conn != null) {
			conn.close();
		}
		DbUtils.closeQuietly(conn);
	}

	/**
	 * 啟動(dòng)連接池
	 * 
	 * @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();
	}

	/**
	 * 關(guān)閉連接池
	 * 
	 * @author 宋立君
	 * @date 2014年07月03日
	 */
	private void ShutdownPool() {
		try {
			PoolingDriver driver = (PoolingDriver) DriverManager
					.getDriver("jdbc:apache:commons:dbcp:");
			driver.closePool(poolName);
			// 關(guān)閉定時(shí)查詢
			queryThread.setStartQuery(false);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 得到一個(gè)連接
	 * 
	 * @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;
	}
}

/**
 * 當(dāng)連接池啟動(dòng)后會(huì)自動(dòng)定時(shí)查詢數(shù)據(jù)庫(kù),防止數(shù)據(jù)庫(kù)連接超時(shí)。
 * 
 * @author 宋立君
 * @date 2014年07月03日
 */
class QueryThread extends Thread {

	private DBUtil dbUtil = null;
	// 是否開啟查詢
	private boolean startQuery = true;

	/**
	 * 功能:對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接。
	 * 
	 * @author 宋立君
	 * @date 2014年07月03日
	 * @param dbUtil
	 *      數(shù)據(jù)庫(kù)連接
	 */
	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;
	}
}

相關(guān)文章

  • SpringBoot如何讀取resources目錄下的文件

    SpringBoot如何讀取resources目錄下的文件

    這篇文章主要介紹了SpringBoot如何讀取resources目錄下的文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java實(shí)現(xiàn)1M圖片壓縮優(yōu)化到100kb實(shí)現(xiàn)示例

    java實(shí)現(xiàn)1M圖片壓縮優(yōu)化到100kb實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了java實(shí)現(xiàn)1M圖片壓縮優(yōu)化到100kb示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 理解Java當(dāng)中的回調(diào)機(jī)制(翻譯)

    理解Java當(dāng)中的回調(diào)機(jī)制(翻譯)

    今天我要和大家分享一些東西,舉例來說這個(gè)在JavaScript中用的很多。我要講講回調(diào)(callbacks)。你知道什么時(shí)候用,怎么用這個(gè)嗎?你真的理解了它在java環(huán)境中的用法了嗎?當(dāng)我也問我自己這些問題,這也是我開始研究這些的原因
    2014-10-10
  • Java實(shí)現(xiàn)的打地鼠小游戲完整示例【附源碼下載】

    Java實(shí)現(xiàn)的打地鼠小游戲完整示例【附源碼下載】

    這篇文章主要介紹了Java實(shí)現(xiàn)的打地鼠小游戲,結(jié)合完整實(shí)例形式分析了Java多線程操作及鍵盤按鍵響應(yīng)實(shí)現(xiàn)的打地鼠游戲功能相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • MyBatis攔截器:給參數(shù)對(duì)象屬性賦值的實(shí)例

    MyBatis攔截器:給參數(shù)對(duì)象屬性賦值的實(shí)例

    下面小編就為大家?guī)硪黄狹yBatis攔截器:給參數(shù)對(duì)象屬性賦值的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Java通過Scanner了解if...else if語(yǔ)句

    Java通過Scanner了解if...else if語(yǔ)句

    這篇文章主要介紹了Java通過Scanner了解if...else if語(yǔ)句,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java中多態(tài)的實(shí)現(xiàn)原理詳細(xì)解析

    Java中多態(tài)的實(shí)現(xiàn)原理詳細(xì)解析

    這篇文章主要介紹了Java中多態(tài)的實(shí)現(xiàn)原理詳細(xì)解析,多態(tài)是面向?qū)ο缶幊陶Z(yǔ)言的重要特性,它允許基類的指針或引用指向派生類的對(duì)象,而在具體訪問時(shí)實(shí)現(xiàn)方法的動(dòng)態(tài)綁定,需要的朋友可以參考下
    2024-01-01
  • java實(shí)現(xiàn)切圖并且判斷圖片是不是純色/彩色圖片

    java實(shí)現(xiàn)切圖并且判斷圖片是不是純色/彩色圖片

    本篇文章主要介紹了java實(shí)現(xiàn)切圖并且判斷圖片是否是純色/彩色圖片,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • Spring+SpringMVC+MyBatis整合詳細(xì)教程(SSM)

    Spring+SpringMVC+MyBatis整合詳細(xì)教程(SSM)

    Spring是一個(gè)開源框架,Spring是于2003 年興起的一個(gè)輕量級(jí)的Java 開發(fā)框架。這篇文章主要介紹了Spring+SpringMVC+MyBatis整合詳細(xì)教程(SSM),需要的朋友可以參考下
    2017-10-10
  • JAVA技術(shù)實(shí)現(xiàn)上傳下載文件到FTP服務(wù)器(完整)

    JAVA技術(shù)實(shí)現(xiàn)上傳下載文件到FTP服務(wù)器(完整)

    這篇文章主要介紹了JAVA技術(shù)實(shí)現(xiàn)上傳下載文件到FTP服務(wù)器(完整),本文使用 Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服務(wù)器實(shí)現(xiàn)FTP服務(wù)器上文件的上傳/下載/刪除等操作,需要的朋友可以參考下
    2015-07-07

最新評(píng)論

枣强县| 富民县| 佛山市| 盐亭县| 金川县| 高要市| 竹北市| 汶上县| 奉化市| 大关县| 沈丘县| 鸡泽县| 泰顺县| 龙州县| 扎赉特旗| 醴陵市| 文成县| 双城市| 淮阳县| 巴马| 崇明县| 莱阳市| 常德市| 涞源县| 连城县| 永仁县| 聂拉木县| 鄂尔多斯市| 宿州市| 通州市| 溧水县| 涡阳县| 双牌县| 东源县| 天等县| 旬邑县| 平罗县| 岗巴县| 蚌埠市| 芷江| 陵川县|