我正在尝试使用 jOOQ 批量插入我的 postgres 数据库。我想做的是:
BatchBindStep bbs = context.batch(context.insertInto(TABLENAME,FIELD1,FIELD2,....).values("?","?",...));
bbs = bbs.bind(v1a,v2a).bind(v1b,v2b)....;
bbs.execute();
如http://www.jooq.org/doc/3.1/manual-single-page/#batch-execution所述
为了清楚起见,我想在一个查询中插入数千行,而不是使用包含数千个查询的批处理:
// 2. a single query
// -----------------
create.batch(create.insertInto(AUTHOR, ID, NAME).values("?", "?"))
.bind(1, "Erich Gamma")
.bind(2, "Richard Helm")
.bind(3, "Ralph Johnson")
.bind(4, "John Vlissides")
.execute();
问题是:要到达 BatchBindStep 接受 .bind() 调用的地步,需要使用一个参数调用 context.batch,该参数将 .values(...) 作为最后一次调用。在文档中指出,“?” 必须使用。这是作为字符串类型的,并且可能仅适用于所有列都是 varchars 的表,因为 jOOQ 进行静态类型。这让我很恼火。我尝试使用任意默认值 (null,0...) 只是为了通过 values(...) 步骤,希望由于这些“值”不是我想要批量插入的真正值,它们会被覆盖后来被绑定。
事实上,他们会的。第一行两次。这完全让我感到困惑。
重复一遍,我可以进行批量插入,但第一行被插入两次。我的直觉是它与“值”调用有关(至少 DSL 中存在与打字有关的概念问题)。
有没有人尝试使用 jOOQ 进行批量插入,如果没有两次插入第一行,如何做到这一点?
PS 当我尝试使用 .values("?", "?", "?", "?", "?", "?", "?", "?", "?","?" ,"?","?","?","?","?","?","?","?","?","?","?","?") : "方法值(Integer, String, String, String, String, String, String, String, String, String, Double, Double, String, String, String, String, Timestamp, String, String, String, String, String) in InsertValuesStep22 类型不适用于参数(字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串, String, String)" 很明显,打错了,当我尝试改编文档中的示例时。