批量获取
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
许多数据库支持从单个查询返回多个结果集或游标。 例如 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>>
类型以实现向后兼容,但它也允许访问数据库可能在结果集之间返回的各个更新计数。
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的声音!