当前位置: 首页 > 知识库问答 >
问题:

关闭连接是否会自动关闭语句和结果集?[重复]

丰超
2023-03-14

我知道Java中的安全模式是在finally块中按顺序关闭结果集、语句和连接。

若您关闭连接,然后尝试关闭语句(不引发异常)。但若您试图从语句中调用任何方法,则会引发异常。

我想知道关闭连接是否会自动关闭所有由该连接创建的语句对象?

更新:我正在使用DatabaseProductVersion:Oracle Database 11g Release 11.1.0.0.0驱动程序名称:Oracle JDBC驱动程序版本:10.2.0.4.0

共有2个答案

许天逸
2023-03-14

细节最终取决于每个JDBC驱动程序实现;但是,一旦关闭与数据库的连接,与之相关的所有内容都将在DB端处理,因此客户端除了自动关闭表示这些资源的对象外无能为力。

您永远不知道数据库/驱动程序可能以何种方式被破坏(例如,可能存在资源泄漏),因此最佳实践建议是明确关闭所有内容。

左丘昕
2023-03-14

是的,连接。close API表示“立即释放此连接对象的数据库和JDBC资源,而不是等待它们自动释放”。问题是应用程序通常使用数据库连接池,这些连接池可能只是在connection.close上返回到池的连接。

无论如何,最好始终显式关闭ResultSet和语句,而不是依赖Connection.close.

此外,直接使用JDBC并不是最好的主意。您可以改用Spring JDBC,忘记释放资源的问题。

 类似资料:
  • 问题内容: 我知道Java中的安全模式是在finally块中依次关闭ResultSet,Statement和Connection。 如果您关闭连接,然后尝试关闭语句(不抛出异常)。但是,如果您尝试从语句中调用任何方法,则会引发异常。 我想知道关闭连接是否会自动关闭从该连接创建的所有语句对象? 更新: 我正在使用DatabaseProductVersion:Oracle Database 11g版本

  • 我读过很多帖子,人们说在java、语句等中关闭连接,但我没有找到我的问题的答案。 我问我不做Con.close(),但我做所以它会关闭连接或不? 所以我只想知道,当我们关闭结果集时,连接是否会关闭?

  • 我最近转到了一个项目,在这个项目中我遇到了很多这种性质的代码--(这是使用jdbc postgres驱动程序) 显然,这段代码已经在生产中运行了一段时间,没有引起问题。 为了进一步澄清,如果我的理解是正确的(即,statement和resultset必须在连接关闭之前而不是之后关闭),我需要在catch和finally之间重复一些代码。修订后的代码如下所示。这可以简化吗? 只是为了透视,这段代码是

  • 我有一个spring应用程序,它的主页发出多个ajax调用,这些调用反过来从DB中提取数据并返回。DB已配置连接池,minPoolSize为50,maxPoolSize为100。 现在,当我打开主页时,大约有7个连接与DB建立,这是因为大约有7个ajax调用被调用,我假设所有调用都创建了自己的连接。现在,当我刷新页面时,我看到又建立了7个新连接(我看到db2监控中总共有14个物理连接),这似乎出乎

  • 问题内容: 尽管随后关闭了连接,是否必须分别关闭JDBC结果集和语句?据说在使用后关闭所有JDBC资源是一个好习惯。但是,如果我有以下代码,是否有必要关闭结果集和语句? 问题是连接的关闭是否可以完成任务,或者它是否使某些资源处于使用状态。 问题答案: 你所做的是完美且非常好的做法。 我说这是一个好的做法的原因……例如,如果由于某种原因你正在使用“原始”类型的数据库池并调用,则连接将返回到池中,并且

  • 我最近和我的教授讨论了如何处理基本的jdbc连接方案。假设我们要执行两个查询,这是他提出的 我不喜欢这种方法,对此我有两个问题: 1.A)我认为,如果在我们做“其他事情”的地方,或在或那么当方法结束时,s1就不会被关闭。我说得对吗? 1.B)教授一直要求我明确关闭结果集(即使声明文档明确表明它将关闭结果集),她说孙建议这样做。有什么理由这样做吗? 现在,我认为这是同样事情的正确代码: 2. A)此