类: java.sql 接口 Statement
方法: int[] executeBatch() throws SQLException
返回值描述:包含批中每个命令的一个元素的更新计数所组成的数组。数组的元素根据将命令添加到批中的顺序排序。
测试环境为:MYSQL 与 Oracle,驱动版本如下
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
<!-- Oracle -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
在实际的测试过程中发现:
DB类型 | 是否可以返回实际影响行数 | 备注 |
---|---|---|
MYSQL | 是 | |
ORACLE | 否 | 每个数组位置值均为-2 |
Oracle每个数组位置值均为-2原因调查:
Oracle驱动源码如下:
oracle.jdbc.driver.OraclePreparedStatement#executeBatch
public int[] executeBatch() throws SQLException {
synchronized (this.connection) {
int[] arrayOfInt = new int[this.currentRank];
/* 此处省略N行代码 */
if ((this.sqlKind != 1) && (this.sqlKind != 4)) {
for (i = 0; i < arrayOfInt.length; i++) {
arrayOfInt[i] = -2; // 关键看这行
}
}
this.connection.registerHeartbeat();
return arrayOfInt;
}
}
参考链接
oracle的PremaredStatement.executeBatch为什么返回-2
oracle对executeBatch并不完全支持总是返回-2