jOOQ:fetchMany和fetchAny

时间:2014-10-29 06:44:09

标签: java sql jooq

我正在浏览jooq文档,试图了解fetchMany和fetchAny是如何工作的。但是没有很多例子和用例可用。 有人可以正确使用这些命令,它们是如何彼此不同以及fetch()的。

1 个答案:

答案 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'");