ResultSet关闭时语句会发生什么?
结果集关闭时语句会发生什么?ResultSet关闭时语句会发生什么?
Statement stmt = null;
ResultSet rs = null;
try {
stmt = con.createStatement();
rs = stmt.executeQuery(query.toString());
...
}
// lots of code
rs.close()
注:一个结果对象被生成它当Statement对象关闭, 重新执行,或用于从 序列检索下一个结果的声明 对象自动关闭多个结果。
但是,当ResultSet先关闭时会发生什么?
对于这件事,首先会发生什么?
您应该按照与创建对象相反的顺序关闭对象。首先,ResultSet
,然后Statement
,最后,Connection
。
如果您不关闭Statement
它保持打开状态,您可以使用它执行另一个查询(如果它是PreparedStatement
或CallableStatement
您可以更改查询参数)。
另请注意,您引用的是JDBC规范,并且它的实现取决于JDBC驱动程序提供者。通常,你不应该相信他们,并手动关闭这些对象。
另一件事 - 我认为更重要的是 - 如果您使用连接池(如JBoss),关闭连接只是将其释放回池中,并且不会释放底层对象。因此,建议您始终手动发布您创建的所有对象。
声明没有任何反应 - 它保持打开状态。您可以继续使用该声明,但一定要在完成后关闭它。
难道你不觉得它更像评论而不是回答。 –
Statement
实际上可以重复使用。尽管如果您重复相同的查询,您应该使用PreparedStatement
,因为查询将被编译一次。
当然他们应该当你与他们所做的,但关闭ResultSet
不会自动关闭Statement
有很好的理由被关闭。
+1说明。很好的一个 –
当你关闭连接时,结果集和语句将被自动关闭... – Sajmon
@ hawaii.five-0是的,除非它是一个连接池,并且你只是将连接释放回池中。 – npe