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:我啥时候可以关闭啥的主要内容,如果未能解决你的问题,请参考以下文章