commons-dbcp 連接池使用

c6e3 9年前發布 | 2K 次閱讀 Java commons-dbcp

dbcp 是 apache 上的一個 java 連接池項目,也是 tomcat 使用的連接池組件。單獨使用dbcp需要3個包:common-dbcp.jar,common-pool.jar,common-collections.jar。
下面是個dbcp的實用類,通過它可以完成DBCP的使用:

 
package dbcp;

import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; import java.util.Map; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; /**

  • @author space
  • @date Aug 12, 2008 3:25:49 PM *
  • dbcp 實用類,提供了dbcp連接,不允許繼承;
  • 該類需要有個地方來初始化 DS ,通過調用initDS 方法來完成,
  • 可以在通過調用帶參數的構造函數完成調用,
  • 可以在其它類中調用,也可以在本類中加一個static{}來完成; / public final class DbcpBean { /** 數據源,static / private static DataSource DS; /* 從數據源獲得一個連接 / public Connection getConn() { Connection con = null; if (Ds!= null) { try { con = Ds.getConnection(); } catch (Exception e) { e.printStackTrace(System.err); }

    try { con.setAutoCommit(false); } catch (SQLException e) { e.printStackTrace(); } return con; } return con; } / 默認的構造函數 */ public DbcpBean() { } / 構造函數,初始化了 DS ,指定 數據庫 / public DbcpBean(String connectURI) { initDS(connectURI); } /** 構造函數,初始化了 DS ,指定 所有參數 / public DbcpBean(String connectURI, String username, String pswd, String driverClass, int initialSize, int maxActive, int maxIdle, int maxWait) { initDS(connectURI, username, pswd, driverClass, initialSize, maxActive, maxIdle, maxWait); } /**

    • 創建數據源,除了數據庫外,都使用硬編碼默認參數;
    • @param connectURI 數據庫
    • @return */ public static void initDS(String connectURI) { initDS(connectURI, "root", "password", "com.mysql.jdbc.Driver", 5, 100, 30, 10000); } /**
    • 指定所有參數連接數據源
    • @param connectURI 數據庫
    • @param username 用戶名
    • @param pswd 密碼
    • @param driverClass 數據庫連接驅動名
    • @param initialSize 初始連接池連接個數
    • @param maxActive 最大激活連接數
    • @param maxIdle 最大閑置連接數
    • @param maxWait 獲得連接的最大等待毫秒數
    • @return / public static void initDS(String connectURI, String username, String pswd, String driverClass, int initialSize, int maxActive, int maxIdle, int maxWait) { BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName(driverClass); ds.setUsername(username); ds.setPassword(pswd); ds.setUrl(connectURI); ds.setInitialSize(initialSize); // 初始的連接數; ds.setMaxActive(maxActive); ds.setMaxIdle(maxIdle); ds.setMaxWait(maxWait); DS = ds; } /** 獲得數據源連接狀態 / public static Map<String, Integer> getDataSourceStats() throws SQLException { BasicDataSource bds = (BasicDataSource) DS; Map<String, Integer> map = new HashMap<String, Integer>(2); map.put("active_number", bds.getNumActive()); map.put("idle_number", bds.getNumIdle()); return map; } /* 關閉數據源 / protected static void shutdownDataSource() throws SQLException { BasicDataSource bds = (BasicDataSource) DS; bds.close(); } public static void main(String[] args) { DbcpBean db = new DbcpBean("jdbc:<a href="mysql://localhost:3306/testit">mysql://localhost:3306/testit"); Connection conn = null; Statement stmt = null; ResultSet rs = null; try { conn = db.getConn(); stmt = conn.createStatement(); rs = stmt.executeQuery("select * from test limit 1 "); System.out.println("Results:"); int numcols = rs.getMetaData().getColumnCount(); while (rs.next()) { for (int i = 1; i <= numcols; i++) { System.out.print("\t" + rs.getString(i) + "\t"); } System.out.println(""); } System.out.println(getDataSourceStats()); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); if (db != null) shutdownDataSource(); } catch (Exception e) { e.printStackTrace(); } } } }

</pre>

 本文由用戶 c6e3 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!