getResultSet()"每个结果应该只调用一次"

nev*_*219 6 java sql jdbc

根据该文件getResultSetjava.sql.Statement,它说:

以ResultSet对象的形式检索当前结果.每个结果只应调用一次此方法.

使用一些测试代码,我跑executeQuery()了几次调用getResultSet()并观察到ResultSet返回指向同一个对象.所以我猜它没有返回ResultSet你需要单独关闭的另一个.但当然这对我的JDBC驱动程序来说可能是独一无二的.

纵观文档ResultSet,它说:

默认的ResultSet对象不可更新,并且只有一个向前移动的游标.因此,您只能迭代一次,并且只能从第一行到最后一行.

这似乎是一个很好的理由,为什么多次调用它可能不是一个好主意,因为它可能导致一些"陷阱"情况.如果这是唯一的原因,我觉得他们可能刚刚说过,所以我认为可能还有更多不仅仅是这个.

那么有谁知道为什么getResultSet每个结果不应该多次打电话?这个问题首先让我好奇.

Gra*_*ray 4

ResultSet对象是 Java JDBC 提供的接口——它们不提供实现。尽管您的特定数据库代码和关联的驱动程序实现了ResultSet以便您可以对每个结果多次调用它,但如果您依赖于合同之外的此类行为,那么您肯定是在玩火。

与该公司签订合同的一个可能原因是this method should be called only once per result是出于效率方面的考虑。构建 ResultSet 很可能会对数据库进行 JDBC RPC 调用,并且 JDBC 规范的作者希望阻止多次往返。他们可能不想强迫实施者有效地防止每个结果多次调用。同样,即使您的数据库正在防止这种行为,并不意味着下一个也会。

大多数ResultSet实现还保持与数据库的连接打开,以便当您获取某些字段(例如大 blob)时,它可以回调数据库以获取数据。打开多个连接或(更糟糕的是)使用来自多个的相同连接ResultSet对象的相同连接将非常危险/令人困惑。

此外,他们可能担心代码的两个部分调用getResultSet()两次,并返回对同一个不同步对象的引用。这会引起混乱next()并用多个引用覆盖对象。

我当然是在猜测,但我希望这会有所帮助。