類(lèi): java.sql 接口 Statement
方法: int[] executeBatch() throws SQLException
返回值描述:包含批中每個(gè)命令的一個(gè)元素的更新計(jì)數(shù)所組成的數(shù)組变屁。數(shù)組的元素根據(jù)將命令添加到批中的順序排序。
測(cè)試環(huán)境為:MYSQL 與 Oracle,驅(qū)動(dòng)版本如下
<!-- 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>
在實(shí)際的測(cè)試過(guò)程中發(fā)現(xiàn):
DB類(lèi)型 | 是否可以返回實(shí)際影響行數(shù) | 備注 |
---|---|---|
MYSQL | 是 | |
ORACLE | 否 | 每個(gè)數(shù)組位置值均為-2 |
Oracle每個(gè)數(shù)組位置值均為-2原因調(diào)查:
Oracle驅(qū)動(dòng)源碼如下:
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; // 關(guān)鍵看這行
}
}
this.connection.registerHeartbeat();
return arrayOfInt;
}
}
參考鏈接
oracle的PremaredStatement.executeBatch為什么返回-2
oracle對(duì)executeBatch并不完全支持總是返回-2