返回信息流如果建立了一个Connection的连接池,当我在程序中需要使用的时候,就getConnection一个Connection对像conn1,当我使用完的时候,就release,不懂的是
1. release后,之前程序获得的那个Connection对像,也就是conn1,在程序中还可以使用吗? 因为只是把conn1这个对像add到了一个管理Connection的ArrayList的对像中了,那在原程序中,即使release了,也还可以使用的吧?
2. 如果问题1中的conn1在原程序中还可以使用的话,那如果这个conn1又被另一个程序得到了,也同时在使用,那会不会很乱啊
3. 执行SQL语句的是Statement类的对像,为什么还要建立Connection对像池呢, 只建立一个Connection对像conn1,然后用conn1建立很多的Statement类的对像,也就是说将Statement类的对像池化不就可以了吗,Connection对像就只建一个?
字数好多,希望有耐性的人帮忙解答下,非常感谢,因为初学,可能问题描述的都有问题~[em21]
这是一条镜像帖。来源:北邮人论坛 / java / #16331同步于 2010/11/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
数据库连接池的疑惑~
summerday
2010/11/11镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
一个connection保持一个完整的事务,一个connection产生的多个stmt共享同一个事务。连接池这个看具体实现吧,要是close了就不能再用了,包括由他产生stmt和resultset。
首先你应该了解一下连接池的原理
获取CONNECTION是非常耗费资源的
最简单的连接池是启动时候获取N个CONNECTION放在LIST中
当你需要获取CONNECTION的时候,从LIST中拿出,当你不用的时候把CONNECTION返回在LIST中,下次需要CONNECTION的时候直接从里面获取
连接池需要一个定时器,定时来检查,
1,检查LIST中CONNECTION是否失效,失效了就删除掉,
2,检查LIST中CONNECTION数量是否足够,如果不够就获取新的CONNECTION放入LIST中
关于你的第2个问题,一般的链接池在没有事务的情况下是不会让你同时 得到2个相同的CONNECTION的,
第三个问题:Statement需要CONNECTION,没有CONNECTION,你Statement也用不起,当你CONNECTION关闭的时候你Statement也关闭了。
如果你只有一个CONNECTION,那么你同时执行2个SQL的话,只能执行其中的一个,另外一个需要等待。。。
性能太差了。。。