使用Groovy批处理异构SQL语句?
讨论如何在批处理中执行多个准备好的语句。但是所有语句都必须具有相同的结构(作为顶级参数传递给使用Groovy批处理异构SQL语句?,sql,groovy,batch-processing,Sql,Groovy,Batch Processing,讨论如何在批处理中执行多个准备好的语句。但是所有语句都必须具有相同的结构(作为顶级参数传递给with batch) 是否有一种方法可以批量生成异构的准备语句,如: sql.withBatch {ps -> ps.addBatch("insert into t1 values(:a, :b)", [a:1, b:2]) ps.addBatch("insert into t2 values(:c)", [c:3]) } (这会引发异常,因为addBatch没有该签名。)如中所
with batch
)
是否有一种方法可以批量生成异构的准备语句,如:
sql.withBatch {ps ->
ps.addBatch("insert into t1 values(:a, :b)", [a:1, b:2])
ps.addBatch("insert into t2 values(:c)", [c:3])
}
(这会引发异常,因为addBatch
没有该签名。)如中所述:
准备好的声明:
使用不同的绑定变量重复相同的语句
批量更新:
通过将多个UPDATE、DELETE或INSERT语句分组到单个批中,并将整个批发送到数据库并在一次处理过程中进行处理,可以减少到数据库的往返次数,从而提高应用程序性能。这在与准备好的语句结合使用时特别有用
如中所述,摘自:
支持JDBC2.0及以上版本的JDBC驱动程序支持批处理
更新。使用批更新,而不是更新DB2(R)的行
表一次一个,您可以指示JDBC执行一组更新
同时,。可以包含在同一批报表中的语句
更新称为批处理语句
如果语句具有输入参数或宿主表达式,则可以
仅在具有其他实例的批处理中包含该语句
同样的说法。这种类型的批次称为均质批次。如果
语句没有输入参数,可以将该语句包含在
仅当批处理中的其他语句没有输入时,才使用批处理
参数或宿主表达式。这种类型的批次称为
异构批次。可以包含在同一文档中的两个语句
批处理称为批处理兼容
这意味着您的请求是不可能的。您可以获得的唯一优势是,对相同类型的语句进行批处理并只准备一次,从而提高了性能:
执行单个SQL语句时,数据库将执行以下操作:
- 准备声明
- 绑定参数
- 执行该语句
- 准备对账单(在一次传输中全部接收)
- 对于以下所有具有不同参数的相同语句
- 绑定参数
- 执行该语句
sql.withBatch(20, "insert into t1 values(:a, :b)") {
...
}
sql.withBatch(20, "insert into t2 values(:c)") {
...
}
顺便说一句,要编译的是
sql.withBatch {ps ->
ps.addBatch("insert into t1 values(1, 2)")
ps.addBatch("insert into t2 values(3)")
}
但是,在这种情况下,我很好奇会发生什么:我希望JDBC驱动程序不会简单地使用批处理。对于这个例子,
< P>,考虑编写一个数据库的存储过程(),它占用三个参数并插入两个记录。应用程序可以用一条准备好的语句调用该过程,并且可以对该语句进行批处理