首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接池环境中是否显式需要statement.close()?

连接池环境中是否显式需要statement.close()?
EN

Stack Overflow用户
提问于 2009-06-03 16:19:40
回答 3查看 6.7K关注 0票数 4

我在应用程序中使用连接池。我的问题是:

在连接池环境中,是否明确要求在关闭连接之前关闭语句?

在连接池环境中,连接不被关闭(但返回到空闲连接池)。我检查了JDBC4.0功能规范。在第9.4.4点中,它明确指出:

关闭连接对象应用程序调用Connection.close方法以指示它已经使用完连接。调用对象的close方法时,从给定连接对象创建的所有语句对象都将被关闭。一旦连接关闭,除close、isClosed或isValid方法之外,任何访问其任何方法的尝试都会引发SQLException。

因此jdbc规范要求在关闭连接时关闭所有语句。那么,它只适用于非连接池环境,还是也适用于连接池环境?

据我所知,在池环境中,这并不重要,因为我们正在为接口(java.sql.Connection & java.sql.Statement)编写代码。因此,我们并不担心实现,父类(java.sql.Connection)没有任何关于子/影响类(Vendor实现类)的信息。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-04 02:47:55

任何具有close()、reason ()、do ()等的对象都会自动建议(当然,您应该阅读API文档,可能有不同的名称用于此目的),该对象需要调用此方法以确保在对象不使用时释放对象资源,如果对象可以自己这样做,anymore.There就没有理由提供这样的方法。

在池java.sql.Connection的情况下,连接不是真正关闭的,只是作为可用的连接推回池中,但是这是内部的东西--也就是您不应该关心的。

票数 4
EN

Stack Overflow用户

发布于 2009-06-03 16:21:03

绝对一点儿没错。Statement实现可能有其他应该发布的资源,或者与连接有其他关系。您不知道,也不应该知道实现的细节。

您的方法是绝对正确的:编写接口代码,避免小的“捷径”,这些“捷径”以后很容易咬到您。(即使它现在起作用了,它也可能不会出现在池或连接类的未来版本中。)

票数 7
EN

Stack Overflow用户

发布于 2009-06-04 03:28:13

根据我的经验,一些JDBC驱动程序存在bug。如果手动关闭所有语句(和ResultSets),它们似乎工作得最好。否则,我已经看到了资源泄漏,这些泄漏不应该在连接关闭后持续存在。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/945662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档