我在应用程序中使用连接池。我的问题是:
在连接池环境中,是否明确要求在关闭连接之前关闭语句?
在连接池环境中,连接不被关闭(但返回到空闲连接池)。我检查了JDBC4.0功能规范。在第9.4.4点中,它明确指出:
关闭连接对象应用程序调用Connection.close方法以指示它已经使用完连接。调用对象的close方法时,从给定连接对象创建的所有语句对象都将被关闭。一旦连接关闭,除close、isClosed或isValid方法之外,任何访问其任何方法的尝试都会引发SQLException。
因此jdbc规范要求在关闭连接时关闭所有语句。那么,它只适用于非连接池环境,还是也适用于连接池环境?
据我所知,在池环境中,这并不重要,因为我们正在为接口(java.sql.Connection & java.sql.Statement)编写代码。因此,我们并不担心实现,父类(java.sql.Connection)没有任何关于子/影响类(Vendor实现类)的信息。
发布于 2009-06-04 02:47:55
任何具有close()、reason ()、do ()等的对象都会自动建议(当然,您应该阅读API文档,可能有不同的名称用于此目的),该对象需要调用此方法以确保在对象不使用时释放对象资源,如果对象可以自己这样做,anymore.There就没有理由提供这样的方法。
在池java.sql.Connection的情况下,连接不是真正关闭的,只是作为可用的连接推回池中,但是这是内部的东西--也就是您不应该关心的。
发布于 2009-06-03 16:21:03
绝对一点儿没错。Statement实现可能有其他应该发布的资源,或者与连接有其他关系。您不知道,也不应该知道实现的细节。
您的方法是绝对正确的:编写接口代码,避免小的“捷径”,这些“捷径”以后很容易咬到您。(即使它现在起作用了,它也可能不会出现在池或连接类的未来版本中。)
发布于 2009-06-04 03:28:13
根据我的经验,一些JDBC驱动程序存在bug。如果手动关闭所有语句(和ResultSets),它们似乎工作得最好。否则,我已经看到了资源泄漏,这些泄漏不应该在连接关闭后持续存在。
https://stackoverflow.com/questions/945662
复制相似问题