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

类: 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基础知识 一、采用JDBC访问数据库的基本步骤: A.载入JDBC驱动程序 B.定义连接URL ...
    java日记阅读 3,936评论 0 20
  • 背景: 阅读新闻 12C CDB模式下RMAN备份与恢复 [日期:2016-11-29] 来源:Linux社区 作...
    阳屯okyepd阅读 3,641评论 0 7
  • 天气越来越热,拥有飘逸长发的女神们,渐渐的把头发辫了起来,一起来看看吧。 1.使用HB铅笔来将女孩儿的整体轮廓起个...
    墨竹_sunshine阅读 636评论 1 3
  • 每个人的世界里都有无数座桥。每一座桥的终点,都是用一段未知的人生构建而成的。青年的我们正走向人生的黄金期,也渐渐走...
    庭安和兔子阅读 281评论 0 0
  • 第十七章 她想她总得为自己做点什么才不辜负对他的一往情深 以顾家的影响力,顾逸年有女朋友的消息自然很快就传开了,甚...
    半忆夏阅读 495评论 0 0