首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jooq batchInsert().execute()

Jooq batchInsert().execute()
EN

Stack Overflow用户
提问于 2017-12-22 12:22:16
回答 1查看 227关注 0票数 0

我的流程如下:

  1. 每次选择数据50行,
  2. 用数据(设定一些值)做某事
  3. 将行转换为另一个表的对象
  4. 调用batchInsert(myListOfRecords).execute()

我的问题是如何设置何时应该插入数据?在当前的设置中,数据只在循环结束时插入。这对我来说是个问题,因为我希望在测试中处理更多的数据。因此,如果我同意这一点,那么我的过程将以异常(OutOfMemory)结束。我应该在哪里定义批处理的最大数据量来调用instert?

EN

回答 1

Stack Overflow用户

发布于 2017-12-28 16:42:03

这里最重要的是不要一蹴而就地将想要处理的所有行都提取到内存中。当使用jOOQ时,这是使用ResultQuery.fetchLazy() (可能与ResultQuery.fetchSize(int)一起)完成的。然后,您可以使用Cursor.fetchNext(50)获取下50行,然后按如下方式进行插入:

代码语言:javascript
复制
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(...);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47941484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档