数据库连接池(转)

       数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。外部使用者可通过getConnection方法获取连接,使用完毕后再通过releaseConnection方法将连接返回,注意此时连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。

      数据库连接池技术带来的优势:1.资源重用。2.更快的系统响应速度。3.新的资源分配手段。4.统一的链接管理,避免数据库连接泄露。
    下面是一个最小化的数据库连接池实现:
public class DBConnectionPoll implements ConnectionPool{
 private static Vector pool;
 private final int POOL_MAX_SIZE = 20;
 //获得数据库连接
 public synchronized Connection getConnection() throws DBException{
  if(poll == null){
   poll = new Vector();
  }
  Connection conn;
  if(pool.isEmpty()){
   conn = createConnection();
  }else{
   int last_idx = pool.size()-1;
   conn = (Connection)pool.get(last_idx);
   pool.remove(pool.get(last_idx));
  }
  return conn;
 }
 //返还数据库连接
 public synchronized void releaseConnection(Connection conn){
  if(pool.size() > POOL_MAX_SIZE){
   try{
    conn.close();
   }catch(SQLException e){
    e.printStackTrace();
   }
  }else{
   pool.add(conn);
  }
 }
 //创建数据库连接 
 private static Connection createConnection() throws DBException{
  Connection con;
  try{
   Class.forName("oracle.jdbc.driver.OracleDriver");
   conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oracle",
    "scott","tiger");
   return conn;
  }catch(ClassNotFoundException e){
   throw new DBException("ClassNotFoundException"); 
  }catch(SQLException e){
   throw new DBException("SQLException");
  }
 }
}
    上面的代码实现了一个最简单的连接池,因为简单,所以明了,目的只是展示数据库连接池实现的一般原理。当然这段代码在实际应用中还是有些问题的,由于getConnection方法返回的是一个标准的JDBC Connection,程序员由于编程习惯,往往在使用完后就close了。如此一来,连接无法得到重用,数据库连接池机制形同虚设。如果要解决这个问题,还需要使用一些模式,如:Decorator模式、Proxy模式等。在这里我就不做更详细的设计说明了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值