gpt4 book ai didi

java - 如何使用 JOOQ 批量执行

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:16 28 4
gpt4 key购买 nike

我正在使用 JOOQ 调用现有的 MySql 存储过程。我的代码是用 Java 编写的。一切都很好,但在批量插入方面我有点困惑。例如,我有这样简单的:

private void executeBatch(DSLContext context, LinkedList<AbstractRoutine<Void>> procedures) {
BatchBindStep step = null;
for (AbstractRoutine<Void> procedure : procedures) {
step = context.batch (context.select(procedure.asField()));
}

step.execute();
}

提供的 LinkedList 中的每个过程都是一个更新或插入过程,具有自己的参数集,并且实际上已准备好执行。我只是想将它们绑定(bind)在一起以进行批处理。

当我尝试执行上面的代码时,出现错误:

Caused by: java.sql.BatchUpdateException: Can not issue SELECT via executeUpdate().

我做错了什么?我应该修理什么?我试图在网上搜索答案,但似乎使用 JOOQ 两个批处理存储过程调用并不那么流行。为了与我的 JOOQ 前应用程序的其余部分保持兼容性,我必须这样做....

最佳答案

As discussed on the user group ,目前(从 jOOQ 3.10 开始)在 jOOQ 中没有对批处理存储过程的开箱即用支持。待处理的功能请求在这里: https://github.com/jOOQ/jOOQ/issues/6813

解决方法

针对您的特定用例,有多种解决方法,包括:

  • 使用暂存表并在其中加载数据/参数集。
  • 使用 jOOQ 的 batching API 将数据直接加载到目标表中或 data loading API
  • 如果您的数据库支持,则使用表值参数
  • 绕过 jOOQ 并求助于普通 JDBC

关于java - 如何使用 JOOQ 批量执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47185044/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com