Jooq batchInsert()。execute()
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jooq batchInsert()。execute()相关的知识,希望对你有一定的参考价值。
我的流程如下:
- 选择一些数据每行选择50行,
- 做数据(设置一些值)
- 将行转换为另一个表的对象
- 调用batchInsert(myListOfRecords).execute()
我的问题是如何设置何时插入数据?在我当前的设置中,数据仅在循环结束时插入。这对我来说是一个问题,因为我想要处理比我在测试中更多的数据。因此,如果我同意这一点,那么我的进程将以异常结束(OutOfMemory)。我应该在哪里定义最大数量的数据来调用instert?
答案
这里重要的是不要一次性获取要处理的所有行。当使用jOOQ时,这是使用ResultQuery.fetchLazy()
(可能与ResultQuery.fetchSize(int)
一起)完成的。然后,您可以使用Cursor.fetchNext(50)
获取接下来的50行,然后按如下方式继续插入:
try (Cursor<?> cursor = ctx
.select(...)
.from(...)
.fetchSize(50)
.fetchLazy()) {
Result<?> batch;
for (;;) {
batch = cursor.fetchNext(50);
if (batch.isEmpty())
break;
// Do your stuff here
// Do your insertion here
ctx.batchInsert(...);
}
}
以上是关于Jooq batchInsert()。execute()的主要内容,如果未能解决你的问题,请参考以下文章