数据库连接池Java实现小结

http://tech.ddvip.com   2006年11月25日    社区交流

本文详细介绍数据库连接池Java实现小结

  因为工作需要要使用到连接池,所以拜读了互联网上众多前辈的文章,学了不少经验,这里想做一个小结,加上自己的想法和在一起,希望能给大家一些帮助。

  目的:消除数据库频繁连接带来的开销和瓶颈。  解决方案:不过多的限制用户的使用,既不能太多的要求用户按规定的方法得到和使用数据库连尽量保持用户的习惯

  目前的很多方法都是要求用户只能按规定方法使用连接,不能使用直接关闭数据连接的方法。解决办法就是使用代理类,来中间解决。可以参考http://www-900.ibm.com/developerWorks/cn/java/l-connpoolproxy/index.shtml

  能维护连接的正常状态

  因为针对数据库连接创建的资源,如果不能及时的释放,就会影响下一次数据连接的使用。例如在sql 2k中,一个连接不同创建多条Statement否则操作时会有数据连接占线的异常,所以必须在归还连接以后释放这些资源。

 //判断是使用了createStatement语句
 if (CREATESTATE.equals(method.getName()))
 {
  obj = method.invoke(conn, args);
  statRef = (Statement)obj;//记录语句
  return obj;
 }
 //判断是否调用了close的方法,如果调用close方法则把连接置为无用状态
 if(CLOSE.equals(method.getName()))
 {
  //设置不使用标志
  setIsFree(false);
  //检查是否有后续工作,清除该连接无用资源
  if (statRef != null)
  statRef.close();
  if (prestatRef != null)
  prestatRef.close();
  return null;
 }
正确保护类不被违例使用

  一个考虑就是不能让用户随便使用代理类,而只能自己使用,一个就是用内部私有类,一个就是使用只有指定类才能调用的标志。我的实现就是采用后者。

责编:豆豆技术应用

正在加载评论...