如Oracle's documentation中所述:
准备好的陈述:
使用不同的绑定变量重复相同的语句。
批量更新:
您可以通过将多个 UPDATE、DELETE 或 INSERT 语句分组到一个批处理中并将整个批处理发送到数据库并一次处理来减少到数据库的往返次数,从而提高应用程序性能。这在与准备好的语句结合使用时特别有用。
如IBM's documentation 中所述并取自here:
支持 JDBC 2.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 驱动程序根本不会使用批处理。