[讨论][实现数据库连接池应该考虑到的问题?]

SmileAndHappy 2005-08-07 05:53:58
我相信这里有很多高手自己写过数据库连接池,请问各位在自己写连接池的时候是否考虑到下面的问题,我是这样考虑的:
某个Connection被归还到连接池后当再次被利用时应该不能被上次用过该连接的程序影响。所以我用了一个MyConnection类实现Connection接口然后来代理实际的Connection的操作,连接池返回的实际上是MyConnection的实例,MyConnection的close方法其实是把连接返回给连接池。而且在调用每个Connection接口的方法时都去检查该连接是否已经被返还,如果是则抛异常。我原本以为这样当一个连接被close后那么就不会对其他使用该连接的程序有影响,但后来又想到下面的代码:
Connection conn = DBManager.getConnection();
Statement stmt = conn.createStatement();
conn.close();
stmt.executeQuery(sql);//
...
//以下虽然对conn不能操作了,但是仍然能对stmt操作

DBManager是连接池的实现者这样虽然连接已经被返还给连接池了,但是stmt还是可以用的,所以被重用的连接还是会受到干扰。除非在实现自己的Statement类和Result类等,太多了。

我的想法是否有问题,是否是我对连接池的概念有错误?还是我的实现方法有问题?
请各位指出,欢迎大家讨论。



...全文
198 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
SmileAndHappy 2005-08-08
  • 打赏
  • 举报
回复
怎么没人来拿分数,那只能都给super_zzw(之支吾) 了。
beakham 2005-08-08
  • 打赏
  • 举报
回复
我是把connection和statement都一起close掉的~
SmileAndHappy 2005-08-07
  • 打赏
  • 举报
回复
怎么生意这么冷淡,就没有人进来讨论一下吗?
SmileAndHappy 2005-08-07
  • 打赏
  • 举报
回复
如果是这样那就比较简单,但我是想,用户得到一个连接,那么就应该以为这个连接是可靠的。而且逻辑上讲,如果归还了某个连接,那么就不该对该连接有影响了。是Apache为了简便起见把责任都放在程序编写者上还是他们其实已经考虑到了这个问题。用Apache的连接池执行我上面的代码,stmt可以执行操作吗?
super_zzw 2005-08-07
  • 打赏
  • 举报
回复
连接池当然不管statement和result的关闭,这是编程时候需要注意的问题。你可以看看Apache开源项目中的连接池的实现,commons-dbcp子项目

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧