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

根据java.sql.Statement getResultSet的文档 ,它说:

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

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

查看ResultSet的文档 ,它说:

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

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

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

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

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

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

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

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