繁体   English   中英

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

[英]How do I do a batch insert in jOOQ with raw SQL?

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

    }

}

这是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之前的一种解决方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM