【问题标题】:How do I do a batch insert in jOOQ with raw SQL?如何使用原始 SQL 在 jOOQ 中进行批量插入?
【发布时间】:2014-10-06 07:29:36
【问题描述】:

我需要使用动态构造的 SQL 进行批量插入。

我发现文档中的示例都使用 jOOQ 生成的表包装类,我在这里没有,我不希望必须弄清楚和指定列名(插入使用表中的所有列定义的顺序)。

我该怎么做?

我尝试了以下方法,但它不起作用(绑定变量最终都为 NULL)。

import org.h2.Driver;
import org.jooq.DSLContext;
import org.jooq.impl.DSL;
import org.junit.Test;

public class BatchBindTest {

    @Test
    public void test() throws SQLException {
        Connection conn = new Driver().connect("jdbc:h2:./batchBindTest", null);
        DSLContext x = DSL.using(conn);
        x.execute("create table test(id integer not null)");


        // this does not work, value is not bound
        x.batch("insert into test values(?)").bind(1).execute();

    }

}

【问题讨论】:

    标签: java jdbc jooq


    【解决方案1】:

    这是 jOOQ 3.4.2 中的一个错误:#3547

    DSLContext.batch(String) 只是为了方便DSLContext.batch(Query),将查询字符串包装在一个普通的 SQL Query 类型中。不幸的是,需要知道绑定值的数量才能应用绑定值。因此,解决此问题的方法是编写:

    x.batch(x.query("insert into test values(?)", new Object[1])).bind(1).execute();
    

    这当然只是修复 #3547 之前的一种解决方法。

    【讨论】:

      猜你喜欢
      • 2021-01-20
      • 2023-01-14
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 2018-01-11
      • 2022-11-11
      相关资源
      最近更新 更多