如何解决getResultSet-“每个结果只能调用一次”
该ResultSet
对象是Java JDBC提供的接口-它们不提供实现。即使您实现了特定的数据库代码和关联的驱动程序,ResultSet
因此您可以 为每个结果多次调用它,但是,如果您依赖于合同之外的这种行为,那么您肯定会大吃一惊。
与this method should be called only once per
result
生产线签订合同的一种可能原因是出于效率方面的考虑。构建ResultSet极有可能对数据库进行JDBC
RPC调用,并且JDBC规范的作者希望阻止多次往返。他们可能不想强迫实施者有效地防止针对每个结果的多次调用。同样,即使您的数据库正在防止这种行为,也并不意味着下一个就可以了。
大多数ResultSet
实现还保持与数据库的连接保持打开状态,以便当您获得某些字段(例如大blob)时,它可以回调数据库以获取数据。打开多个连接或使用多个ResultSet
对象的相同连接(更糟)将是非常危险/令人困惑的。
同样,他们可能担心代码的两个部分被调用getResultSet()
两次,并且返回了对同一单个未同步对象的引用。这在next()
调用时会造成混乱,并用多个引用覆盖对象。
我当然在猜测,但我希望这会有所帮助。
解决方法
根据该文件对getResultSet
中java.sql.Statement
,它说:
以ResultSet对象的形式检索当前结果。每个结果仅应调用此方法一次。
使用一些测试代码,我运行executeQuery()
并多次调用,getResultSet()
并观察到ResultSet
返回的对象指向同一个对象。因此,我猜测它不会返回ResultSet
您需要单独关闭的其他内容。但是,当然这对于我的JDBC驱动程序可能是唯一的。
纵观文档的ResultSet
,它说:
默认的ResultSet对象是不可更新的,并且具有仅向前移动的光标。因此,您只能迭代一次,并且只能从第一行到最后一行进行迭代。
这似乎是一个很好的理由,为什么多次调用它可能不是一个好主意,因为它可能导致某些“陷阱”情况。如果这是唯一的原因,我认为他们本可以这样说,所以我认为可能不仅限于此。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。