2008-10-31 46 views
2

目前,我有JDBC代码以下基本stucture:JDBC:我什么时候可以关闭什么

获取连接

(做下一个4行几次,从来没有致闭幕词)
GET语句
得到的结果集
处理结果集
接近的结果集

紧密结合

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

获取连接

(做下一个5行几次)
GET语句
获取结果集
紧密声明
处理结果集
接近的结果集

紧密结合

回答

3

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

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

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

7

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

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

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

1

如果您正在使用Oracle和忘记关闭陈述了一段时间后,你会得到

ORA-01000: maximum open cursors exceeded 

相关问题