JDBC2.0 規範引入了資料庫連接池技術。JDBC的資料庫連接池使用 javax.sql.DataSource介面來表示,該介面通常由商用伺服器(如WebLogic、WebSphere)等提供實現,也有一些開源組織提供實現(如DBCP、C3P0)。
DataSource 通常被稱為資料來源,它包含串連池和串連池管理兩個部分,但習慣上我們也經常把DataSource稱為串連池。
DBCP 串連池依賴另一個開源系統:commons-pool.jar。
import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import org.apache.commons.dbcp.BasicDataSource;public class DBCP_JDBC {public static void main(String[] args) {BasicDataSource ds=new BasicDataSource();Connection conn=null;ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");ds.setUrl("jdbc:oracle:thin:@localhost:1521:orcl");ds.setUsername("scott");ds.setPassword("tiger");ds.setInitialSize(5);//設定串連池的初始串連數ds.setMaxActive(20);//設定串連池最多可有多少個活動串連數ds.setMinIdle(2);//設定串連池中最少有多少個閒置串連try {conn=ds.getConnection();//通過資料來源擷取資料庫連接Statement stmt=conn.createStatement();ResultSet rs=stmt.executeQuery("select * from dept");while(rs.next()){int deptno=rs.getInt("deptno");String dname=rs.getString("dname");String loc=rs.getString("loc");System.out.println(deptno+"\t"+dname+"\t"+loc);}} catch (SQLException e) {e.printStackTrace();}finally{try {conn.close();//釋放資料庫連接} catch (SQLException e) {e.printStackTrace();}}}}
運行程式,控制台輸出:
程式中conn.close( );並沒有關閉資料庫的物理串連,它僅僅把資料庫連接釋放,歸還給串連池,讓其他用戶端可以使用該串連。
查看 BasicDataSource 的原始碼可以知道:
public class BasicDataSource implements DataSource {...}