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

标签 java jdbc

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

    Statement stmt = null;
    ResultSet rs = null;

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

    // lots of code

    rs.close()

Note: A ResultSet object is automatically closed by the Statement object that generated it when that Statement object is closed, re-executed, or is used to retrieve the next result from a sequence of multiple results.

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

对于什么事情,应该先发生什么?

最佳答案

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

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

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

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

关于java - 当 ResultSet 关闭时 Statement 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10923027/

相关文章:

java - 需要设计模式

java - JdbcTemplate queryForInt/Long 在 Spring 3.2.2 中被弃用。应该用什么代替?

java - Vertx3 - 从 JDBC 连接返回值? (sql 数据库)。

java - 从 sql 命令行创建数据库并在 Java jdbc 代码中使用它

java - JDBC Oracle 属性文件

java - SQL错误或缺少数据库(没有这样的表:Employeeinfo) using sqlite and net beans

Java SSL 错误 : Unable to retrieve certificate chain

java - 使用文件提供程序将相机照片从 fragment 保存到图库

java - Hibernate 创建 SQLQuery。如何获取 boolean 值

java - Grails 项目中的 ClassCastException