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