可用版本:Dev3.21)| 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

批量获取

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

许多数据库支持从单个查询返回多个结果集或游标。 例如 Sybase ASE 的 sp_help 命令

> 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 和 JDBC 之间的差异一章中讨论的那样,jOOQ 不依赖于任何 JDBC 对象的内部状态,该状态由 Javadoc “外部化”。相反,它有一个直观的 API,允许您在一行中执行上述操作

// Get some information about the author table, its columns, keys, indexes, etc
Results results = create.fetchMany("sp_help 'author'");

返回的 org.jooq.Results 类型扩展了 List<Result<Record>> 类型以实现向后兼容,但它也允许访问数据库可能在结果集之间返回的各个更新计数。

引用此页

反馈

您对此页面有任何反馈吗? 我们很乐意听到您的声音!

The jOOQ Logo