我很困惑何时使用
executeBatch()
和executeLargeBatch()
。
我浏览了 Java 文档,发现唯一的区别是:
当返回的行数可能超过
executeLargeBatch()
时,应使用。Integer.MAX_VALUE
我将
executeBatch()
替换为 executeLargeBatch()
,但尚未发现任何性能改进。
处理
Integer.MAX_VALUE
是唯一的目的吗?其中一种相对于另一种是否有任何性能优势?
executeBatch
返回int[]
以返回每次更新的计数。 executeLargeBatch
返回 long[]
以返回每次更新的计数。因此,文档说如果计数可能超出 int
的容量,则使用后者。例如,它们是 executeUpdate
(返回 int
)和 executeLargeUpdate
(返回 long
)的批处理等价物。
我不认为会有任何显着的性能差异;如果您可能更新超过 2,147,483,647 行,这只是一个不要溢出
int
的问题。
从源码来看,
executeBatch()
实际上是在内部调用了executeLargeBatch
,所以从性能角度来说,它们应该是一样的
public int[] executeBatch() throws SQLException {
Monitor.CloseableLock lock = this.connection.acquireCloseableLock();
Throwable var2 = null;
int[] var3;
try {
var3 = this.toIntArray(this.executeLargeBatch());
} catch (Throwable var12) {
var2 = var12;
throw var12;
} finally {
if (lock != null) {
if (var2 != null) {
try {
lock.close();
} catch (Throwable var11) {
var2.addSuppressed(var11);
}
} else {
lock.close();
}
}
}
return var3;
}