java常用工具類之?dāng)?shù)據(jù)庫連接類(可以連接多種數(shù)據(jù)庫)
更新時間:2014年07月05日 12:52:17 投稿:junjie
這篇文章主要介紹了java常用工具類之?dāng)?shù)據(jù)庫連接類,可以連接多種數(shù)據(jù)庫,代碼中包含詳細(xì)注釋,需要的朋友可以參考下
依賴包下載:http://xiazai.jb51.net/201407/tools/java-db-dependency(jb51.net).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; // 連接池 // 對應(yīng)的定時查詢類 private QueryThread queryThread = null; /** * 功能:構(gòu)造函數(shù) * * @author 宋立君 * @date 2014年07月03日 * @param dri * 驅(qū)動全類名,例如: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容器此名稱不能重復(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對應(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)為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(); // 得到結(jié)果集(rs)的結(jié)構(gòu)信息,比如字段數(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; } /** * 關(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); } /** * 啟動連接池 * * @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)閉定時查詢 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; } } /** * 當(dāng)連接池啟動后會自動定時查詢數(shù)據(jù)庫,防止數(shù)據(jù)庫連接超時。 * * @author 宋立君 * @date 2014年07月03日 */ class QueryThread extends Thread { private DBUtil dbUtil = null; // 是否開啟查詢 private boolean startQuery = true; /** * 功能:對應(yīng)的數(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; } }
您可能感興趣的文章:
- java配置dbcp連接池(數(shù)據(jù)庫連接池)示例分享
- Java開發(fā)Oracle數(shù)據(jù)庫連接JDBC Thin Driver 的三種方法
- Java數(shù)據(jù)庫連接池的幾種配置方法(以MySQL數(shù)據(jù)庫為例)
- java實現(xiàn)mongodb的數(shù)據(jù)庫連接池
- Java 數(shù)據(jù)庫連接池詳解及簡單實例
- Java實現(xiàn)數(shù)據(jù)庫連接池簡易教程
- Java數(shù)據(jù)庫連接_jdbc-odbc橋連接方式(詳解)
- javaweb中mysql數(shù)據(jù)庫連接步驟方法及其實例
- java jdbc連接mysql數(shù)據(jù)庫實現(xiàn)增刪改查操作
- Java語言實現(xiàn)對MySql數(shù)據(jù)庫中數(shù)據(jù)的增刪改查操作的代碼
- Java連接MySQL數(shù)據(jù)庫增刪改查的通用方法(推薦)
- java 數(shù)據(jù)庫連接與增刪改查操作實例詳解
相關(guān)文章
IDEA2019.2.2配置Maven3.6.2打開出現(xiàn)Unable to import Maven project
這篇文章主要介紹了IDEA2019.2.2配置Maven3.6.2打開出現(xiàn)Unable to import Maven project,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12SpringBoot應(yīng)用快速部署到K8S的詳細(xì)教程
這篇文章主要介紹了SpringBoot應(yīng)用快速部署到K8S的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12JUC系列學(xué)習(xí)工具類CountDownLatch詳解
這篇文章主要介紹了JUC系列學(xué)習(xí)工具類CountDownLatch詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可任意參考一下2022-08-08SpringBoot使用hutool-captcha實現(xiàn)驗證碼生成與驗證
在springboot的登陸頁面中為了防止機器大規(guī)模注冊,機器暴力破解數(shù)據(jù)密碼等危害,需要驗證隨機生成的驗證碼,本文主要介紹了SpringBoot使用hutool-captcha實現(xiàn)驗證碼生成與驗證,感興趣的可以了解一下2023-12-12