我需要使用动态构造的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();
}
}
答案 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修复之前只有一种解决方法。