根据java.sql.Statement
的documentation为getResultSet
,它说:的getResultSet()“应该被称为每个结果只有一次”
检索当前结果作为ResultSet对象。每个结果只能调用一次该方法 。
使用一些测试代码,我跑executeQuery()
并多次打电话给getResultSet()
并观察返回的ResultSet
指向同一个对象。所以我猜测它不会返回一个不同的ResultSet
,你需要单独关闭它。但是,这当然可以是我的JDBC驱动程序独有的。
纵观documentation为ResultSet
它说:
默认的ResultSet对象不可更新,并具有游标 向前移动而已。因此,只能从第一行到最后一行遍历一次,并且只能遍历一次。
这似乎是一个很好的理由,因为它可能导致一些“陷阱”的情况多次调用它可能不是一个好主意。如果这是唯一的原因,我觉得他们可能只是说,所以我认为可能比这更多。
因此,有谁知道为什么每个结果不应该多次调用getResultSet
?这question是让我好奇的第一个地方。
没有发布这个答案,因为它只是一个预感,但我怀疑这是给JDBC驱动程序开发人员留有余地的方法,使他们无法定义当你多次调用它时会发生什么。在你的特定情况下,它可以工作,但如果你曾经切换JDBC驱动程序,它可能不会。 – 2012-04-02 22:19:06
我认为它就像这样简单:ResultSet对象具有状态。只有一个ResultSet对象作为Statement的成员。获取对象不会重新执行语句。如果您在第一次获得后修改了某些内容,则无法保证第二次获取对象与第一次获取对象的状态相同。所以这只是一个谨慎。查看Postres jdbc驱动程序(org.postgresql.jdbc2.AbstractJdbc2Statement),我们可以看到它在内部使得许多调用像这样:return(result!= null && result.getResultSet()!= null); – Glenn 2012-04-03 01:08:13