代码之家  ›  专栏  ›  技术社区  ›  shsteimer

JDBC:什么时候可以关门?

  •  2
  • shsteimer  · 技术社区  · 16 年前

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

    获取连接

    (下面4行重复几次,永不结束语句)
    获取语句
    获得结果集
    处理结果集
    关闭结果集

    闭合连接

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

    获取连接

    (接下来的5行重复几次)
    获取语句
    获得结果集
    关闭语句
    处理结果集
    关闭结果集

    闭合连接

    3 回复  |  直到 16 年前
        1
  •  3
  •   Aaron McDaid    16 年前

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

    但是,一般规则是,只有在使用相应的结果集之后才能关闭语句。

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

        2
  •  7
  •   James Schek    16 年前

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

    示例2不保证有效。语句应在使用结果集后关闭。规范说,如果您尝试使用这个结果集,那么应该得到一个sqlException(一些JDBC驱动程序不严格遵循规范——MS并不是最大的违规者)。

    如果忘记关闭结果集或语句,则发生的更糟糕的情况是,使用数据库和JVM资源的时间比需要的时间长。在资源受限或高负载系统上,这可能导致内存/连接/资源错误或性能降低。

        3
  •  1
  •   asalamon74    16 年前

    如果你在使用Oracle,忘记关闭语句,你会得到

    ORA-01000: maximum open cursors exceeded
    

    过了一会儿。