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

作者: 鱼塘鱼 | 来源:发表于2018-05-11 16:51 被阅读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

相关文章

网友评论

    本文标题:JDBC批量插入返回值问题总结

    本文链接:https://www.haomeiwen.com/subject/wlzfdftx.html