我试图使用jOOQ批量插入到我的postgres数据库中。 我试图做的是:jooq批量插入问题(复制第一行)
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 ...)的运气,以通过值(...)步骤,希望由于这些“值”并非真正的 值,我想批量插入,他们得到稍后被绑定覆盖。
事实上,他们会。第一排TWICE为 。这完全让我感到困惑。
重复,我可以做批量插入,但第一行插入TWICE。我有直觉认为它与“值”调用有关(至少在DSL中存在与输入有关的概念问题)。
有没有人试图使用jOOQ进行批量插入,以及如何不插入第一行两次?
P.S.当我尝试使用 .values(“?”,“?”,“?”,“?”,“?”,“?”,“?”,“?”,“?”,“?” “”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“” :字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,双字符串,双字符串,字符串,字符串,字符串,字符串,时间戳,字符串,字符串, String, String, String,String,String) InsertValuesStep22不适用于参数(String,String,String,String,String,String,String,String,String,String,String,String,String,String, String,String,String,String ,字符串,字符串,字符串,字符串)“ 显然,当我尝试修改文档中的示例时,输入是错误的。
看起来这个文档已经过时了,从之前的3版本开始。0“版本,其中'values()'子句的静态类型尚未实施。你可以提供一个例子如何重现插入第一行两次?这确实令人惊讶...... –