当ResultSet关闭时,Statement会发生什么?

时间:2012-06-06 22:10:16

标签: java jdbc

结果集关闭时语句会发生什么?

    Statement stmt = null;
    ResultSet rs = null;

    try {
        stmt = con.createStatement();
        rs = stmt.executeQuery(query.toString());
        ...
    }

    // lots of code

    rs.close()
  

注意:Statement会自动关闭ResultSet对象   该Statement对象关闭时生成它的对象,   重新执行,或用于从序列中检索下一个结果   多重结果。

但是当ResultSet首先关闭时会发生什么?

对于什么问题,首先应该发生什么?

3 个答案:

答案 0 :(得分:6)

您应按照与创建对象相反的顺序关闭对象。 首先是ResultSet,然后是Statement,最后是Connection

如果您未关闭Statement,它会保持打开状态,您可以使用它执行另一个查询(如果它是PreparedStatementCallableStatement您可以更改查询参数)。

另请注意,您所引用的是JDBC规范,其实现取决于JDBC驱动程序提供程序。通常,您不应该信任它们,并手动关闭这些对象。

另一件事 - 我认为更重要的是 - 如果你正在使用连接池(比如在JBoss上),关闭连接只会将其释放回池中,并且不会释放底层对象。因此,建议始终手动释放您创建的所有对象。

答案 1 :(得分:2)

Statement实际上可以重复使用。虽然如果您重复相同的查询,则应使用PreparedStatement,因为查询将被编译一次。

他们当然应该在您完成后关闭,但关闭ResultSet并不会自动关闭Statement

答案 2 :(得分:1)

声明没有任何反应 - 它保持开放状态。您可以继续使用您想要的语句,但请务必在完成后关闭它。