【问题标题】:jOOQ - difference between fetchAny and fetchOnejOOQ - fetchAny 和 fetchOne 之间的区别
【发布时间】:2015-07-30 04:59:53
【问题描述】:

fetchAny()fetchOne() 之间有(真正的)区别吗?两者都返回准确的一条记录。 API 文档相同,但实现(在 github 上)不同。

【问题讨论】:

    标签: java sql jooq


    【解决方案1】:

    The javadoc 解释了差异。 fetchAny() 返回第一条记录,而 fetchOne() 期望查询返回零或一条记录,如果查询返回多条记录,则抛出异常。

    【讨论】:

      【解决方案2】:

      两种方法的意图不同:

      本质上,当您使用fetchOne() 时,查询必须返回0 或1 条记录。当你使用fetchAny()时,查询可以返回任意数量的记录,如果数据库返回任何记录,则返回从JDBC结果集中获取的第一个。

      请注意,fetchOne() 将因此尝试从 JDBC 驱动程序获取 2 条记录(以决定是否需要抛出 TooManyRowsException),而 fetchAny() 最多只能获取 1 条记录。

      【讨论】:

      • 使用 fetchOne() 有什么性能优势吗?我可以假设它停止在整个表中找到记录吗?
      • @vinaypatlolla: jOOQ 最多会从 JDBC ResultSet 获取两条记录(第一个返回,第二个需要检查fetchOne() 是否需要抛出TooManyRowsException) .但是,您仍然应该确保 1) 您的 JDBC 驱动程序不会缓存太多行,2) 您的数据库实际上不会加载游标中的所有行。理想情况下,您也将使用 jOOQ 的 limit(1) 子句。
      • 谢谢@Lukas Eder。顺便说一句,JOOQ 很棒 :)我已经使用它 2 个月了,对我们帮助很大。
      • 我有一个问题@Lukas Eder。jooq 生成的类都与数据库名称同步,现在我想使用具有相同表的新模式,即我将只在新表上工作这个模式,当我现在生成类时,我看到我所有的类都有新的模式名称。那么我如何在我的类中没有太多变化的情况下使用多个模式?
      • @vinaypatlolla 也许这有帮助:jooq.org/doc/latest/manual/code-generation/schema-mapping
      猜你喜欢
      • 1970-01-01
      • 2018-01-02
      • 2021-12-25
      • 2020-05-10
      • 2014-09-20
      • 2010-10-28
      • 2015-10-04
      • 2012-08-12
      • 2011-02-18
      相关资源
      最近更新 更多