2

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

获取连接

(接下来的 4 行执行几次,从不关闭语句)
get 语句
获取结果集
处理结果集
关闭结果集

紧密连接

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

获取连接

(多次执行接下来的 5 行)
get statement
get result set
close statement
process result set
close result set

紧密连接

4

3 回答 3

7

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

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

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

于 2008-10-31T21:17:59.990 回答
3

不幸的是,答案取决于您的 JDBC 驱动程序。你在那里写的可能有用。

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

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

于 2008-10-31T19:26:31.493 回答
1

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

ORA-01000: maximum open cursors exceeded

过了一会儿。

于 2008-11-10T20:45:12.033 回答