Jooq batchInsert()。execute()

时间:2017-12-22 12:22:16

标签: configuration jooq

我的流程如下:

  1. 为每个选择选择一些数据50行,

  2. 使用数据(设置一些值)

  3. 将行转换为另一个表的对象
  4. 调用batchInsert(myListOfRecords).execute()
  5. 我的问题是如何设置何时插入数据?在我当前的设置中,数据仅在循环结束时插入。这对我来说是一个问题,因为我想要处理比我在测试中更多的数据。因此,如果我同意这一点,那么我的进程将以异常结束(OutOfMemory)。我应该在哪里定义最大数量的数据来调用instert?

1 个答案:

答案 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(...);
    }
}