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

Jam*_*sev 1 java jdbc

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

    Statement stmt = null;
    ResultSet rs = null;

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

    // lots of code

    rs.close()
Run Code Online (Sandbox Code Playgroud)

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

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

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

npe*_*npe 6

您应该按照创建它们的相反顺序关闭对象.首先是ResultSet,然后Statement是最后的结果Connection.

如果你没有关闭Statement它,它会保持打开状态,你可以用它执行另一个查询(如果它是a PreparedStatementCallableStatement你能够更改查询参数).

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

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