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 {...}