2

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

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

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

4

4 回答 4

3

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

于 2012-09-22T07:11:22.000 回答
3

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

于 2012-09-21T11:05:45.767 回答
3

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

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

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

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

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

于 2012-09-21T11:35:02.630 回答
2

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

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

于 2012-09-21T11:05:51.490 回答