Oracle数据库管理之道oracle的基本sql介绍我爱编程

JDBC批量插入返回值问题总结

2018-05-11  本文已影响7人  鱼塘鱼
类: 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

上一篇 下一篇

猜你喜欢

热点阅读