成批更新

本文介绍了如何使用Statement、PreparedStatement和CallableStatement对象进行批量更新操作。详细解释了每种对象的使用方法,包括设置批处理、执行批处理及捕获异常等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Statement, PreparedStatement, CallableStatement对象都可以用来进行成批更新。

一、成批更新所使用的对象

1、Statement对象

  成批更新功能允许一个Statement对象一起提交一个不同种类的更新命令作为一个单元或是一个批处理来执行。当一个Statement对象创建的时候,与之相连的批处理命令为空,程序可以使用Statement.addBatch方法为这个Statement的批处理加入命令,并且加入相应的SQL更新语句,所有被加入的更新命令的返回值都必须是一个更新数。如果一个程序不想提交已经为Statement加入的更新命令,可以调用Statement.clearBatch方法来清除这些更新命令。

//Statement对象的批处理程序代码
conn.setAutoCommit(false);
Statement stmt
=conn.createStatement();
stmt.addBatch ( 
"insert into employees values (1000,  ' Joe Jones') " );
stmt.addBatch ( 
" insert into departments values ( 260, ' Shoe ' ) " );
stmt.addBatch ( 
" insert into emp_dept values ( 1000, 260 ) " );
int[] updateCounts = stmt.ExecuteBatch();

Statement.ExecuteBatch向数据源提交了一系列的命令要求批量处理,这些命令会按被加到这个批处理中的顺序执行,当所有命令都成功完成后,ExecuteBatch就会返回一个整数数组,这个数组的每个元素都是对应着相应命令在批处理组中的条目。

只有返回一个简单的更新数的DDL和DML命令可以被用于批处理执行,如果一个命令想返回一个ResultSet对象,ExecuteBatch会抛出一个BatchUpdateException的例外。当这个例外产生后,应用程序可以调用BatchUpdateException.getUpdateCounts来获得一个描述例外起因的更新数组。

二、PreparedStatement对象

当使用PreparedStatement时,在一个批处理组中的命令通常包含一个参数化的SQL语句和一个相联系的参数集合。

//PreparedStatement对象的批处理程序
conn.setAutoCommit (false);
PreparedStatement stmt 
= conn.prepareStatement ( " insert into employees values ( ? , ? )");
stmt.setInt ( 
12000 );
stmt.setString ( 
2"Kelly ");
stmt.addBatch ();
stmt.setInt ( 
13000 );
stmt.setString (
2"Bill ");
stmt.addBatch ();
int[] updateCounts = stmt.ExecuteBatch ():

三、CallableStatement对象

CallableStatement的批处理更新方法和PreparedStatement相似。

一个批处理的存储过程不可以有OUT或INOUT参数,如果违反这个限制,CallableStatement.ExecuteBatch方法就会抛出一个例外。

//PreparedStatement对象的批处理程序
CallableStatement cstmt = conn.prepareCall ( " { call updatePrice ( ?, ? ) } ");
cstmt.setString ( 
1" Colombian ");
cstmt.setFloat (
28.49f);
cstmt.addBatch();
cstmt.setString (
1"Decaf");
cstmt.setFloat (
29.49f);
cstmt.addBatch ();
int[] updateCounts = cstmt.ExecuteBatch();

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值