当前位置: 首页 > 面试题库 >

getResultSet()-“每个结果只能调用一次”。

何涵衍
2023-03-14
问题内容

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

以ResultSet对象的形式检索当前结果。每个结果仅应调用此html" target="_blank">方法一次。

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

纵观文档的ResultSet,它说:

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

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


问题答案:

ResultSet对象是Java JDBC提供的接口-它们不提供实现。即使您实现了特定的数据库代码和关联的驱动程序,ResultSet因此您
可以 为每个结果多次调用它,但是,如果您依赖于合同之外的这种行为,那么您肯定会大吃一惊。

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

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

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

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



 类似资料:
  • 如何才能做到这一点呢? 谢谢大家。

  • 问题内容: 我有一个简单的线程是这样的: 编辑:开始运行的附加代码 它是主要活动的内部类。但是, 此线程 不是在主 活动 上 运行,而是在 另一个 在 主 活动上 运行的线程 内部 运行 。 无论如何,此示例与此处 完全相同 ,但是由于某种原因,它给了我java.lang.RuntimeException:每个线程只能创建一个Looper。 我没有创建任何其他循环程序,至少在任何地方都没有。 问题

  • 问题内容: 我有以下查询,该查询创建了一个视图表,该视图显示了商店中最高的销售员,其他信息很少: 上面的查询将仅显示单个商店的销售数据,其原因如上所述。我的桌子上有20家商店。如何更改上面的查询,以便为我提供20家商店的销售数据(即20行)。 问题答案: 根据上一个问题的答案,如果在同一家商店中以相同的总销售额捆绑多个员工,则将退回所有此类员工。

  • 我在两个表之间有一个关系,其中一个联接表只有一个结果。 当我定义一个Laravel-BelongToMany关系时,我希望它单独返回该项,而不是只返回一个元素的集合。 有没有一种方法可以在Laravel中对此进行建模? 提前感谢。 [编辑] 我将尝试使用经典的用户/角色示例来解释我想要什么。除了de和表之外,我们还有一个pivot表,它将存储用户拥有的所有角色。用户在任何给定时间只能有一个活动角色

  • 问题内容: 如果我有多个选择,例如: …如果第一个选择返回内容,我得到1个结果集。但是,如果运行第二个,我将得到两个结果集。第一个没有行,第二个没有行。 如果运行第二个选择,是否有办法仅返回第二个结果集? 谢谢! 问题答案: 您需要通过 在 运行选择 之前 检查是否会返回任何结果来阻止首次选择。 例如:

  • 我试图使用新的Android P FloatingActionButton,它是的一部分,我得到了以下警告: 只能从同一个库组(groupid=com.google.android.Material)调用VisibilityAwareImageButton.SetVisibility 我尝试了搜索,唯一的搜索结果是关于响应UI可见性更改: 我需要注意的是,我使用的是Android Studio版本