我正在浏览jooq文档,试图了解fetchMany和fetchAny是如何工作的。但是没有很多例子和用例可用。 有人可以正确使用这些命令,它们是如何彼此不同以及fetch()的。
答案 0 :(得分:2)
手册中概述了各种ResultQuery.fetch()
方法的一般概念:
特别是:
就您的具体问题而言,我认为相关的Javadoc可能有所帮助:
fetchAny()
执行查询并返回最多一条结果记录。
示例:
TableRecord randomRecord =
DSL.using(configuration)
.select()
.from(TABLE)
.fetchAny();
因此,这将获取数据库首先返回的任何记录。类似的查询将是以下一个,您在数据库中明确地将记录数限制为1:
TableRecord randomRecord =
DSL.using(configuration)
.select()
.from(TABLE)
.limit(1)
.fetchOne();
fetchMany()
各种数据库支持从存储过程返回多个结果集。 Sybase ASE示例:
> sp_help 'author'
+--------+-----+-----------+-------------+-------------------+
|Name |Owner|Object_type|Object_status|Create_date |
+--------+-----+-----------+-------------+-------------------+
| author|dbo |user table | -- none -- |Sep 22 2011 11:20PM|
+--------+-----+-----------+-------------+-------------------+
+-------------+-------+------+----+-----+-----+
|Column_name |Type |Length|Prec|Scale|... |
+-------------+-------+------+----+-----+-----+
|id |int | 4|NULL| NULL| 0|
|first_name |varchar| 50|NULL| NULL| 1|
|last_name |varchar| 50|NULL| NULL| 0|
|date_of_birth|date | 4|NULL| NULL| 1|
|year_of_birth|int | 4|NULL| NULL| 1|
+-------------+-------+------+----+-----+-----+
直接使用JDBC时,这是相当繁琐的,因为你必须编写大量代码来获取另一个结果:
ResultSet rs = statement.executeQuery();
// Repeat until there are no more result sets
for (;;) {
// Empty the current result set
while (rs.next()) {
// [ .. do something with it .. ]
}
// Get the next result set, if available
if (statement.getMoreResults()) {
rs = statement.getResultSet();
}
else {
break;
}
}
// Be sure that all result sets are closed
statement.getMoreResults(Statement.CLOSE_ALL_RESULTS);
statement.close();
使用jOOQ和fetchMany()
,这很简单:
List<Result<Record>> results = create.fetchMany("sp_help 'author'");