如何使用原始SQL在jOOQ中执行批量插入?

时间:2014-08-13 03:44:08

标签: java jdbc jooq

我需要使用动态构造的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();

    }

}

1 个答案:

答案 0 :(得分:4)

这是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修复之前只有一种解决方法。