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