为了减轻服务器压力 避免每次访问数据库都要建立一个对数据库的连接,因此数据库连接池是最好的一个功能。
数据库连接池编写原理分析。
1.编写连接池需要实现javax.sql.DataSource接口。
DataSource接口中定义 了两个重载的getConnection方法。
1)Connection getConnection()
2)Connection getConnection(String username,String password)
2.实现DataSource接口,并实现连接池功能的步骤
1)在DataSource构造函数中批量创建与数据库的连接,并把创建的连接保存到一个集合对象中。
2)实现getConnection 方法。让getConnection()每次调用时,从集合对象中取一个Connection返回给用户。
3)当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到连接池的集合对象中。而不要把conn还给数据库。
具体步骤如下
1.编写class实现DataSource接口
public class Test implements DataSource{
2.在class构造器中一次性创建多个连接
public Test(){
//一次性创建十个连接
for(int i=0;i<10;i++){
try{
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/day14","root","wdl03707552882");
//将连接加入连接池
datasource.add(con);
}
catch(Exception e){
e.printStackTrace();
}
}
3.实现getConnection从LinkedList中返回一个连接
public Connection getConnection() throws SQLException {
//取出连接池中的一个连接
Connection con=datasource.removeFirst();//删除第一个连接 并且返回
//取出一个连接对象放到所需要的对象中。
System.out.println("此时连表中有"+datasource.size()+"个");
return con;
}
4.提供将连接放回到连接池中的方法。
public void realeaseCon(Connection con){
datasource.add(con);
System.out.println("将连接放回到连接连表中此时连表中有"+datasource.size()+"个连接对象");
}
注意:一般用户会习惯用con.close()方法进行关闭连接,而不是调用datasource.release()方法,那么将破坏连接池。
那么现在有一种方法可以通过即使用户使用close也可以把数据库连接池连表的对象放回到连接池中。那么就可以修改close方法的逻辑。
有三种途径可以增强原有方法。