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

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

获取连接

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

关闭连接

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

获取连接

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

关闭连接

【问题讨论】:

    标签: java database jdbc


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        ORA-01000: maximum open cursors exceeded
        

        过了一会儿。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-24
          • 2010-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-13
          • 2015-03-02
          • 1970-01-01
          相关资源
          最近更新 更多