Java —— JDBC关闭Statement后是否还需要关闭ResultSet?

发布时间 2023-04-26 00:28:00作者: 爱笙灬

一、问题描述

下面的代码使用了try-with-resource语法,会自动关闭ConnectionStatement,是否还需要关闭ResultSet
Statement关闭后ResultSet会被回收么?

二、JDBC规范

JDBC规范4.3中有对Statement关闭后是否需要关闭ResultSet进行说明。

应用调用了 statement.close 表明其已经完成了 statement 的使用。所有的 statment 对象都将在创建他们的 connection 被关闭时 一起被关闭。但在 statements 对象已经处理完成后尽快关闭对程序来说是一个好的实现。这能够使得statment立刻释放占用的资源。
关闭一个statement对象同时也会使得该对象创建的所有resultSet对象被关闭。resultSet所持有的资源不会立刻被释放,直到GC执行, 因此当resultSet对象不再被需要时明确地关闭是一个很好的做法。
一旦statement对象被关闭,调用了该对象本身isColsedcolse方法的自身任何方法都将抛出SQLException异常。
以上有关 关闭statement对象的内容也同样适用于PreparedStatementCallableStatement

Tips:关闭连接时最好按照resultSet先关,statement接着,connection最后的顺序