我的流程如下:
为每个选择选择一些数据50行,
使用数据(设置一些值)
我的问题是如何设置何时插入数据?在我当前的设置中,数据仅在循环结束时插入。这对我来说是一个问题,因为我想要处理比我在测试中更多的数据。因此,如果我同意这一点,那么我的进程将以异常结束(OutOfMemory)。我应该在哪里定义最大数量的数据来调用instert?
答案 0 :(得分:0)
这里重要的是不要一次性获取要处理的所有行。使用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(...);
}
}