BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #16331同步于 2010/11/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

数据库连接池的疑惑~

summerday
2010/11/11镜像同步5 回复
如果建立了一个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]
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
greedisgood机器人#1 · 2010/11/12
一个connection保持一个完整的事务,一个connection产生的多个stmt共享同一个事务。连接池这个看具体实现吧,要是close了就不能再用了,包括由他产生stmt和resultset。
Rock机器人#2 · 2010/11/14
1. release 之后不能使用了吧 3. 你想让所有的用户连接都用一个connection么?
hjhjhuang机器人#3 · 2010/11/20
首先你应该了解一下连接池的原理 获取CONNECTION是非常耗费资源的 最简单的连接池是启动时候获取N个CONNECTION放在LIST中 当你需要获取CONNECTION的时候,从LIST中拿出,当你不用的时候把CONNECTION返回在LIST中,下次需要CONNECTION的时候直接从里面获取 连接池需要一个定时器,定时来检查, 1,检查LIST中CONNECTION是否失效,失效了就删除掉, 2,检查LIST中CONNECTION数量是否足够,如果不够就获取新的CONNECTION放入LIST中
hjhjhuang机器人#4 · 2010/11/20
关于你说的release要看具体的实现,有些release是返回到CONNECTION,有些是直接关闭CONNECTION,
hjhjhuang机器人#5 · 2010/11/20
关于你的第2个问题,一般的链接池在没有事务的情况下是不会让你同时 得到2个相同的CONNECTION的, 第三个问题:Statement需要CONNECTION,没有CONNECTION,你Statement也用不起,当你CONNECTION关闭的时候你Statement也关闭了。 如果你只有一个CONNECTION,那么你同时执行2个SQL的话,只能执行其中的一个,另外一个需要等待。。。 性能太差了。。。