Java 当ResultSet关闭时,语句会发生什么情况?

Java 当ResultSet关闭时,语句会发生什么情况?,java,jdbc,Java,Jdbc,当结果集关闭时,语句会发生什么情况 Statement stmt = null; ResultSet rs = null; try { stmt = con.createStatement(); rs = stmt.executeQuery(query.toString()); ... } // lots of code rs.close() 注意:语句会自动关闭ResultSet对象 当语句

当结果集关闭时,语句会发生什么情况

    Statement stmt = null;
    ResultSet rs = null;

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

    // lots of code

    rs.close()
注意:语句会自动关闭ResultSet对象 当语句对象关闭时生成它的对象, 重新执行,或用于从序列中检索下一个结果 多重结果

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


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

应按与创建对象相反的顺序关闭对象。 首先是结果集,然后是语句,最后是连接

如果不关闭该语句,它将保持打开状态,如果它是PreparedStatement或CallableStatement,您可以使用它执行另一个查询,您可以更改查询参数

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


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

您应按创建对象的相反顺序关闭对象。 首先是结果集,然后是语句,最后是连接

如果不关闭该语句,它将保持打开状态,如果它是PreparedStatement或CallableStatement,您可以使用它执行另一个查询,您可以更改查询参数

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


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

语句没有任何变化-它保持打开状态。您可以按照自己的意愿继续使用该语句,但请确保在完成后将其关闭。

该语句不会发生任何变化-它保持打开状态。您可以按照自己的意愿继续使用该语句,但请确保在完成后将其关闭。

该语句实际上可以重复使用。但是,如果重复相同的查询,则应使用PreparedStatement,因为查询将编译一次

当然,当您处理完它们时,它们应该被关闭,但是关闭结果集并不会出于充分的理由自动关闭该语句。

该语句实际上可以重用。但是,如果重复相同的查询,则应使用PreparedStatement,因为查询将编译一次


它们当然应该在您处理完后关闭,但是关闭结果集并不会自动关闭语句,这是有充分理由的。

您不认为它更像是一条评论而不是答案吗?您不认为它更像是一条评论而不是答案。@hawai.five-0 Yeah,除非它是一个连接池,而您只是将连接释放回池中。连接池通常会在连接返回池时关闭所有依赖于连接的对象。@hawaii.five-0 Yeah,除非它是一个连接池,而您只是将连接释放回池中。当连接返回到池中时,连接池通常会关闭所有依赖于连接的对象。