数据库连接池的实现及分析

来源:互联网 发布:战争雷霆手机数据库 编辑:程序博客网 时间:2024/06/07 00:47

为了减轻服务器压力  避免每次访问数据库都要建立一个对数据库的连接,因此数据库连接池是最好的一个功能。

数据库连接池编写原理分析。

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方法的逻辑。

有三种途径可以增强原有方法。












0 0
原创粉丝点击