jdbc:我啥时候可以关闭啥

Posted

技术标签:

【中文标题】jdbc:我啥时候可以关闭啥【英文标题】:jdbc: when can i close whatjdbc:我什么时候可以关闭什么 【发布时间】:2008-10-31 19:21:17 【问题描述】:

目前我的 jdbc 代码具有以下基本结构:

获取连接

(多次执行接下来的 4 行,永远不要结束语句) 获取声明 获取结果集 处理结果集 关闭结果集

关闭连接

写完这段代码后,我突然想到我需要关闭语句。 1 不关闭语句有什么影响。 2 下面的工作,这个 si 将关闭语句阻止我正常处理结果集?

获取连接

(多次执行接下来的 5 行) 获取声明 获取结果集 关闭声明 处理结果集 关闭结果集

关闭连接

【问题讨论】:

【参考方案1】:

关闭行为在JDBC Specification 中指定。关闭连接会释放与连接关联的所有 JDBC 资源,并将隐式关闭所有语句、结果集等。关闭语句将关闭结果集。

不保证示例 2 有效。该语句应在使用 ResultSet 后关闭。规范说,如果您尝试使用该 ResultSet,您应该得到一个 SQLException(一些 JDBC 驱动程序不严格遵循规范 - 而 MS 不是最大的罪犯)。

如果您忘记关闭 ResultSet 或 Statement,最糟糕的情况是您消耗数据库和 JVM 资源的时间超过了必要的时间。在资源受限或高负载的系统上,这可能会导致内存/连接/资源错误或性能下降。

【讨论】:

【参考方案2】:

很遗憾,答案取决于您的 JDBC 驱动程序。你在那里写的东西可能有用。

但是,一般规则是只有在完成相应的结果集后才关闭语句。

编辑:我意识到您还有第二个问题,您询问了不关闭语句/结果集等的影响。效果也取决于您的 JDBC 驱动程序,但可能会导致严重的资源泄漏。

【讨论】:

【参考方案3】:

如果您使用 Oracle 并忘记关闭您会得到的语句

ORA-01000: maximum open cursors exceeded

过了一会儿。

【讨论】:

以上是关于jdbc:我啥时候可以关闭啥的主要内容,如果未能解决你的问题,请参考以下文章

MySQLi 查询结果:我啥时候关闭、空闲或两者都关闭?

函子我啥时候应该使用它们它们的预期用途是啥[关闭]

我啥时候应该使用助手? [关闭]

我啥时候开始看到付款? [关闭]

我啥时候应该销毁令牌[关闭]

我啥时候必须关闭数据库连接? (爪哇)