语句executeBatch方法返回值为2的数组

时间:2015-04-02 08:43:15

标签: java sql jdbc

当我在java中执行statement.executeBatch()方法时,它返回一个值为2的int数组

jdbc-spec有关于批量更新的返回代码的以下内容:

■0或更高

■Statement.SUCCESS_NO_INFO

■-2

但我每次都是2。 记录将从数据库中成功删除,并从两个表中删除满足查询的25条记录。但在sysout中,它将受影响的记录值显示为2

    Connection conn = null;
    Statement stmt = null;
    try {
        Class.forName(JDBC_DRIVER);
        conn = DriverManager.getConnection(CONNECTION_URL, USERNAME, PASSWORD);
        stmt = conn.createStatement();
        System.out.println("trying to execute query");

        stmt.addBatch("DELETE FROM TABLE1 WHERE CRTE_TSTP < TRUNC(SYSDATE) - 14");
        stmt.addBatch("DELETE FROM TABLE2 WHERE RECV_TSTP < TRUNC(SYSDATE) - 14");

        int affectedRecords[] = stmt.executeBatch();            
        conn.commit();

        System.out.println("number of rows deleted  " + affectedRecords.length);

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }

}

2 个答案:

答案 0 :(得分:3)

您获取的是数组的长度,而不是实际的int值。您是否尝试过计算返回数组元素的删除总和。例如:

int affectedRecordsSum = affectedRecords[0] + affectedRecords[1];
System.out.println("number of rows deleted  " + affectedRecordsSum);

答案 1 :(得分:0)

也许你错了:

int [] executeBatch()抛出SQLException

向数据库提交一批命令以供执行,如果所有命令都成功执行,则返回一组更新计数。返回的数组的int元素按顺序对应于批处理中的命令,这些命令根据它们添加到批处理的顺序进行排序。 executeBatch方法返回的数组中的元素可能是以下之一:

1)大于或等于零的数字 - 表示命令已成功处理,并且是一个更新计数,给出了数据库中受命令执行影响的行数

2)SUCCESS_NO_INFO的值 - 表示命令已成功处理但受影响的行数未知 如果批量更新中的某个命令无法正确执行,则此方法将抛出BatchUpdateException,并且JDBC驱动程序可能会也可能不会继续处理批处理中的其余命令。但是,驱动程序的行为必须与特定的DBMS一致,要么始终继续处理命令,要么永远不会继续处理命令。如果驱动程序在发生故障后继续处理,则BatchUpdateException.getUpdateCounts方法返回的数组将包含与批处理中的命令一样多的元素,并且至少有一个元素如下:

3)值EXECUTE_FAILED - 表示命令无法成功执行,仅在命令失败后驱动程序继续处理命令时才会发生