Java —— JDBC 关闭 Statement 后是否还需要关闭 ResultSet?
一、问题描述
下面的代码使用了 try-with-resource 语法,会自动关闭 Connection 和 Statement, 是否还需要关闭 ResultSet?Statement 关闭后 ResultSet 会被回收么?
二、JDBC 规范
JDBC 规范 4.3 中有对 Statement 关闭后是否需要关闭 ResultSet 进行说明。
应用调用了 statement.close 表明其已经完成了 statement 的使用。所有的 statment 对象都将在创建他们的 connection 被关闭时 一起被关闭。但在 statements 对象已经处理完成后尽快关闭对程序来说是一个好的实现。这能够使得 statment 立刻释放占用的资源。
关闭一个 statement对象同时也会使得该对象创建的所有 resultSet对象被关闭。resultSet 所持有的资源不会立刻被释放,直到 GC 执行, 因此当 resultSet对象不再被需要时明确地关闭是一个很好的做法。
一旦 statement对象被关闭,调用了该对象本身 isColsed 和 colse 方法的自身任何方法都将抛出 SQLException 异常。
以上有关 关闭 statement对象的内容也同样适用于 PreparedStatement 和 CallableStatement。
Tips:关闭连接时最好按照 resultSet 先关,statement 接着,connection 最后的顺序。
摘抄自网络,便于检索查找。

浙公网安备 33010602011771号