首先大家都知道,正常的关闭顺序都是ResultSet、PreparedStatement、Connection的顺序,这里就不作讨论了
Connection:与特定数据库的连接(会话)。
PreparedStatement:表示预编译的 SQL 语句的对象。SQL 语句被预编译并且存储在 PreparedStatement
对象中。然后可以使用此对象高效地多次执行该语句。
ResultSet:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
接下里说的是如果不关闭某一个对象的时候它的关闭状态会如何处理
按照jdbc接口要求, 这里作个总体概述:
关闭connection后,statement及resultset会自动关闭或者关闭statement后resultset会自动关闭
下面具体来说下上面这句话的意思:
在jdk文档中的Connection接口的close方法介绍::
close方法会立即释放此 Connection 对象的数据库和 JDBC 资源,而不是等待它们被自动释放。
注:Connection 对象在进行垃圾回收时被自动关闭。某些严重的错误也会关闭 Connection 对象
我想这里的jdbc资源和它们,就是connection statement resultset等资源
在jdk文档中的Statement接口的close方法介绍:
close方法会立即释放此 Statement 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。一般来说,使用完后立即释放资源是一个好习惯,
这样可以避免对数据库资源的占用。
注:Statement 对象在进行垃圾回收时被自动关闭。关闭 Statement 对象时,还将同时关闭其当前的 ResultSet 对象(如果有)。
这里Prapredstatement接口是继承statement接口的
ResultSet接口的close方法中介绍到:
close方法会立即释放此 ResultSet 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。
注:当生成 ResultSet 对象的 Statement 对象关闭、重新执行或用来从多个结果的序列检索下一个结果时,该 Statement 对象会自动关闭 ResultSet 对象。
垃圾回收 ResultSet 对象时它也会自动关闭
如上所述的“这里的等待该对象自动关闭”也就是等java的垃圾回收器进行gc回收