【发布时间】:2015-07-30 04:59:53
【问题描述】:
fetchAny() 和 fetchOne() 之间有(真正的)区别吗?两者都返回准确的一条记录。 API 文档相同,但实现(在 github 上)不同。
【问题讨论】:
fetchAny() 和 fetchOne() 之间有(真正的)区别吗?两者都返回准确的一条记录。 API 文档相同,但实现(在 github 上)不同。
【问题讨论】:
The javadoc 解释了差异。 fetchAny() 返回第一条记录,而 fetchOne() 期望查询返回零或一条记录,如果查询返回多条记录,则抛出异常。
【讨论】:
两种方法的意图不同:
返回:
如果查询没有返回记录,则返回结果记录或 null。
投掷:
TooManyRowsException- 如果查询返回多条记录
返回:
第一个结果记录,如果查询没有返回记录,则返回 null。
本质上,当您使用fetchOne() 时,查询必须返回0 或1 条记录。当你使用fetchAny()时,查询可以返回任意数量的记录,如果数据库返回任何记录,则返回从JDBC结果集中获取的第一个。
请注意,fetchOne() 将因此尝试从 JDBC 驱动程序获取 2 条记录(以决定是否需要抛出 TooManyRowsException),而 fetchAny() 最多只能获取 1 条记录。
【讨论】:
ResultSet 获取两条记录(第一个返回,第二个需要检查fetchOne() 是否需要抛出TooManyRowsException) .但是,您仍然应该确保 1) 您的 JDBC 驱动程序不会缓存太多行,2) 您的数据库实际上不会加载游标中的所有行。理想情况下,您也将使用 jOOQ 的 limit(1) 子句。