【发布时间】:2021-04-25 02:23:55
【问题描述】:
如果我的查询结果是一个包含原始值的列,有没有办法用 jooq 获取它们,避免原始装箱?
例如,从表中的每本书中获取页数作为 int[]。
int[] pageCounts = dsl.select(BOOK.PAGE_COUNT)
.from(BOOK)
.fetch();
【问题讨论】:
如果我的查询结果是一个包含原始值的列,有没有办法用 jooq 获取它们,避免原始装箱?
例如,从表中的每本书中获取页数作为 int[]。
int[] pageCounts = dsl.select(BOOK.PAGE_COUNT)
.from(BOOK)
.fetch();
【问题讨论】:
jOOQ 大量使用泛型,这意味着在 jOOQ 内部的某些时候,装箱是不可避免的,即使 jOOQ 有可能将结果作为int[] 公开给您。
您将不得不直接使用 JDBC 运行查询(您仍然可以使用 jOOQ 构建它)来执行您想要的操作。例如
// Use some third party primitive int buffer
var buffer = new IntArrayList();
try (
Cursor<?> cursor = dsl.select(BOOK.PAGE_COUNT).from(BOOK).fetchLazy();
ResultSet rs = cursor.resultSet();
) {
while (rs.next())
buffer.add(rs.getInt(1));
}
【讨论】: