获得所需的ResultSet后关闭Connection对象

时间:2012-09-21 11:00:14

标签: java jdbc

如果我拿到Connection后关闭ResultSet对象会有什么影响吗?

Connection con= DriverManager.getConnection();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(query);
con.close();

除此之外,我使用我的rs对象,我觉得不会对它产生任何影响。因为ResultSetStatement相互关联。

4 个答案:

答案 0 :(得分:3)

关闭Connection后,不得使用其他资源(StatementResultSet s。)

答案 1 :(得分:3)

在连接关闭后,您不得使用从Connection派生的任何内容。

这实际上是因为在您实际使用结果集之前,可能无法将结果集等内容传输到您的计算机。数据库可以并且确实使用传输批处理和服务器游标 - 这是一种复杂的方式,它说它们只是在您通过移动结果集游标(例如使用ResultSet#next())实际请求时将一块行传输给您。

结果集的其他部分(如BLOB或其他LOB类型)在您实际从结果集中读取之前根本不会传输。那是因为它们可以任意大,而DB驱动程序(好吧,好的 DB驱动程序)想要最小化它在客户端中使用的内存。

数据库服务器本身通常比驱动程序(它只是一个通信仲裁器)复杂得多,并且最好将“繁重的”(结果集的编组和临时存储)留给数据库: - )

因此,您可以看到关闭连接将释放所有服务器资源 - 并且可能有很多 - 与您的查询相关联。

答案 2 :(得分:3)

关闭与数据库的连接后,很快就无法访问结果集。因为,当您使用resultset.next()方法时,它会向数据库发送请求以获取下一条记录;但物理上连接已经关闭。因此,您的语句Exception会抛出resultset.next()

答案 3 :(得分:2)

如果要在关闭后访问ResultSet,则无法关闭连接。您将丢失ResultSet数据,并在尝试访问时获得异常。

这是因为ResultSet实例链接到数据库连接。