解惑

解己之惑,解人之惑

连接池中的Connection.close()应该干什么?

本来想写一个简单的数据库连接池的,上网搜索了一下别人的实现,也看了一些开源的实现,感觉有些问题,那就是连接池中的Connection.close()应该干什么?按照API的说明,这个方法应该释放数据库和JDBC的资源,但是这样的话,连接池中的连接就要重新建立,似乎没有起到pool应有的作用,如果代码不进行close操作,交给其它的地方释放又不太安全。难到说我原来的代码习惯都是错的?取得一个Connection后,使用完不需要close,而是把相关的ResultSet和Statement关闭就行了?
找了很多文章,都没有提到这个问题。
目前来看,我不用关注那么多了,可能的解决方法就是让框架来执行数据库操作,执行完以后commit,关掉ResultSet和Statement,Connection保持连接,一定时间以后再close。

(Visited 680 times, 1 visits today)

4 Comments

  1. 用连接池的话,close后,应该是并没有释放
    只是放回到连接池中
    连接池可以使connection被重用
    被控制可用的connection的数量
    如果内部用stack实现的,只要控制这个stack的capcity就可以了哦

  2. 用连接池的话,close后,应该是并没有释放资源
    只是放回到连接池中
    连接池可以使connection被重用
    被控制可用的connection的数量
    如果内部用stack实现的,只要控制这个stack的capcity就可以了哦

  3. 我看过很多连接池的实现,调用close的时候会调用实际connection的close方法。当然我没有跟得那么深入,但是我想如果不close的话也可能有问题的。

  4. 不解
    既然做了连接池应该就是为了重用资源
    如果释放了资源,还不如用jdbc直连呢
    如果请求的连接数超过了连接池的容量,可以让它挂起
    至于你说不释放资源会引发的问题,我就不知道了
    毕竟这方便经验我还很少,呵呵

发表评论

电子邮件地址不会被公开。 必填项已用*标注

© 2020 解惑

本主题由Anders Noren提供向上 ↑