语句 executeBatch 方法 returns 数组值 2
Statement executeBatch method returns array of value 2
当我在 java 中执行 statement.executeBatch() 方法时,它 returning 一个值为 2
的 int 数组
jdbc-spec 对批更新的 return-代码有以下说明:
■ 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();
}
}
您得到的是数组的长度,而不是实际的 int 值。您是否尝试过从返回的数组元素中计算删除的总和。例如:
int affectedRecordsSum = affectedRecords[0] + affectedRecords[1];
System.out.println("number of rows deleted " + affectedRecordsSum);
可能是你用错了:
int[] executeBatch() 抛出 SQLException
向数据库提交一批命令以供执行,如果所有命令都成功执行,returns 更新计数数组。返回的数组的 int 元素被排序以对应于批处理中的命令,这些命令根据它们被添加到批处理中的顺序排序。 executeBatch 方法返回的数组中的元素可能是以下之一:
1)大于或等于零的数字 -- 表示命令已成功处理并且是一个更新计数,给出了数据库中受命令执行影响的行数
2)值为SUCCESS_NO_INFO -- 表示命令处理成功但受影响的行数未知
如果批处理更新中的命令之一未能正确执行,此方法将抛出 BatchUpdateException,并且 JDBC 驱动程序可能会或可能不会继续处理批处理中的其余命令。但是,驱动程序的行为必须与特定的 DBMS 一致,要么始终继续处理命令,要么从不继续处理命令。如果驱动程序在失败后继续处理,方法 BatchUpdateException.getUpdateCounts 返回的数组将包含与批处理中的命令一样多的元素,并且至少有一个元素是以下元素:
3)值为EXECUTE_FAILED -- 表示命令未能成功执行,只有驱动程序在命令失败后继续处理命令才会出现
当我在 java 中执行 statement.executeBatch() 方法时,它 returning 一个值为 2
的 int 数组jdbc-spec 对批更新的 return-代码有以下说明:
■ 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();
}
}
您得到的是数组的长度,而不是实际的 int 值。您是否尝试过从返回的数组元素中计算删除的总和。例如:
int affectedRecordsSum = affectedRecords[0] + affectedRecords[1];
System.out.println("number of rows deleted " + affectedRecordsSum);
可能是你用错了:
int[] executeBatch() 抛出 SQLException
向数据库提交一批命令以供执行,如果所有命令都成功执行,returns 更新计数数组。返回的数组的 int 元素被排序以对应于批处理中的命令,这些命令根据它们被添加到批处理中的顺序排序。 executeBatch 方法返回的数组中的元素可能是以下之一:
1)大于或等于零的数字 -- 表示命令已成功处理并且是一个更新计数,给出了数据库中受命令执行影响的行数
2)值为SUCCESS_NO_INFO -- 表示命令处理成功但受影响的行数未知 如果批处理更新中的命令之一未能正确执行,此方法将抛出 BatchUpdateException,并且 JDBC 驱动程序可能会或可能不会继续处理批处理中的其余命令。但是,驱动程序的行为必须与特定的 DBMS 一致,要么始终继续处理命令,要么从不继续处理命令。如果驱动程序在失败后继续处理,方法 BatchUpdateException.getUpdateCounts 返回的数组将包含与批处理中的命令一样多的元素,并且至少有一个元素是以下元素:
3)值为EXECUTE_FAILED -- 表示命令未能成功执行,只有驱动程序在命令失败后继续处理命令才会出现