java - 如何使用 JOOQ 批量执行

标签 java mysql stored-procedures jdbc jooq

我正在使用 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/

相关文章:

mysql - 您正在以匿名用户身份使用 mariadb

mysql - 循环表并调用存储过程

Mysql - 备份部分数据

sql-server - T-SQL 中的临时函数或存储过程

mysql - 如果循环内有多个语句的语句不起作用

Java:如何发送 XML 请求?

java - 使用 Java 12 运行 Eclipse 4.11

stored-procedures - ASP Classic - 记录集对象与命令对象

java - 添加 GitLab 私有(private)仓库作为 Maven 依赖

java - JMonkey无尽地形示例: How to change the render distance