`
qilixiang012
  • 浏览: 203830 次
文章分类
社区版块
存档分类
最新评论

javaEE jdbc批处理

 
阅读更多

executeBatch()方法返回一个更新计数的数组,每个值对应于批处理操作中的一个命令。批处理操作可能会抛出一个类型为

BatchUpdateException的异常,这个异常表明批处理操作中至少有一条命令失败了。

int[] executeBatch() throws SQLException

将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。返回数组的 int 元素的排序对应于批中的命

令,批中的命令根据被添加到批中的顺序排序。方法executeBatch 返回的数组中的元素可能为以下元素之一:

大于等于 0 的数 - 指示成功处理了命令,是给出执行命令所影响数据库中行数的更新计数

SUCCESS_NO_INFO 的值 - 指示成功执行了命令,但受影响的行数是未知的

如果批量更新中的命令之一无法正确执行,则此方法抛出 BatchUpdateException,并且 JDBC 驱动程序可能继续处理批处理中的剩

余命令,也可能不执行。无论如何,驱动程序的行为必须与特定的DBMS 一致,要么始终继续处理命令,要么永远不继续处理命

令。如果驱动程序在某一次失败后继续进行处理,则BatchUpdateException.getUpdateCounts 方法返回的数组将包含的元素与批中

存在的命令一样多,并且其中至少有一个元素将为:

EXECUTE_FAILED 的值 - 指示未能成功执行命令,仅当命令失败后驱动程序继续处理命令时出现

在 Java 2 SDK, Standard Edition, 1.3 版中已经修改了可能的实现和返回值,以适应抛出 BatchUpdateException 对象后在批量更新

中继续处理命令的选项。

返回:包含批中每个命令的一个元素的更新计数所组成的数组。数组的元素根据将命令添加到批中的顺序排序。

抛出:SQLException - 如果发生数据库访问错误,在已关闭的Statement 上调用此方法,或者驱动程序不支持批量语句。如果未能

正确执行发送到数据库的命令之一或者尝试返回结果集合,则抛出BatchUpdateException(SQLException 的子类)。

其中整形常量的值分别为:

SUCCESS_NO_INFO -2

EXECUTE_FAILED -3

示例:

try {
			Connection con = null;
			con.setAutoCommit(false);
			PreparedStatement prepStmt = con
					.prepareStatement("UPDATE DEPT SET MGRNO=? WHERE DEPTNO=?");
			prepStmt.setString(1, "1");
			prepStmt.setString(2, "2");
			prepStmt.addBatch();

			prepStmt.setString(1, "2");
			prepStmt.setString(2, "3");
			prepStmt.addBatch();

			int[] numUpdates = prepStmt.executeBatch();
			for (int i = 0; i < numUpdates.length; i++) {
				if (numUpdates[i] == -2)
					System.out.println("Execution " + i
							+ ": unknown number of rows updated");
				else
					System.out.println("Execution " + i + "successful: "
							+ numUpdates[i] + " rows updated");
			}
			con.commit();
		} catch (BatchUpdateException b) {
		} catch (SQLException e) {
			e.printStackTrace();
		}



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics