理解重点:
是一个“缓冲池”,负责分配、管理和释放数据库连接,允许用用程序重复试用一个连接池中一个现有的数据库连接,而不是重新建立一个。
连接池通过设定最小连接数来初始化连接,通过最大连接数来限定当前连接池能占有的最大连接数量。在此过程中,通过设定最大空闲连接数来释放多余连接数并约束保留一定空闲连接数,再通过设定最小空闲数来预防突然而来的链接(在最大连接数的限制下尽量满足)。最后通后设定等待的最长时间来管理连接时间过长异常。
Javax.sql.DateSource接口表示,其实现由服务器(如Weblogic,WebSphere,Tomcat)或一些开源组织提供(如DBCP数据库连接池,C3P0数据库连接池)。DataSource 通常被称为数据源,它包含连接池和连接池管理两个部分,习惯上也经常把 DataSource 称为连接池。
使用DBCP连接池实现,需增加两jar包:Commons-dbcp.jar连接池的实现;Commons-pool.jar连接池实现的依赖库。Tomcat的连接池即采用此连接池实现。
操作重点:
BasicDataSource bds=null;
//创建数据源对象
bds=new BasicDataSource();
//设置连接数据库的驱动
bds.setDriverClassName("com.mysql.jdbc.Driver");
//设置连接数据库的url
bds.setUrl("jdbc:mysql://localhost:3306/test");
//设置连接数据库的用户名
bds.setUsername("root");
//设置连接数据库的密码
bds.setPassword("root");
//设置连接池启动时的初始值
bds.setInitialSize(5);
//设置连接池的最大值
bds.setMaxActive(50);
//最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经
//用不到的连接慢慢释放一部分,一直减少到maxIdle为止
bds.setMaxIdle(20);
//最小空闲值.当空闲的连接数少于该值时,连接池就会预申请一些连接,
//以避免洪峰来时再申请而造成的性能开销
bds.setMinIdle(5);
//设置等待时间,以毫秒为单位
bds.setMaxWait(5000);
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
String sql="select id,name,sex from customer";
try {
con=bds.getConnection();
pstmt=con.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()){
Integer id=rs.getInt(1);
String name=rs.getString(2);
String sex=rs.getString(3);
System.out.println("id "+id +" name "+ name +" sex "+sex );
}
} catch (SQLException e) {
e.printStackTrace();
}