gpt4 book ai didi

java - 获取结果集() "should be called only once per result"

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:22:37 24 4
gpt4 key购买 nike

根据documentation对于 java.sql.Statement 中的 getResultSet,它说:

Retrieves the current result as a ResultSet object. This method should be called only once per result.

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

查看 documentation对于 ResultSet 它说:

A default ResultSet object is not updatable and has a cursor that moves forward only. Thus, you can iterate through it only once and only from the first row to the last row.

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

那么有人知道为什么每个结果不应该多次调用 getResultSet 吗?这question这首先让我感到好奇。

最佳答案

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

使用此方法在每个结果行中只调用一次 编写契约(Contract)的一个可能原因是出于效率原因。构建 ResultSet 很可能会对数据库进行 JDBC RPC 调用,而 JDBC 规范的作者希望阻止多次往返。他们可能不想强制实现者有效地防止每个结果多次调用。同样,即使您的数据库正在防止这种行为,并不意味着下一个也会。

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

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

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

关于java - 获取结果集() "should be called only once per result",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9984468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com