批处理命令与事务的结合使用

1.通常我们使用的sql是处理一条命令,而如果我们想要同时处理多个命令该怎么办呢?比如说:在一个购物车里想删除多个商品,这时候想要使用一条命令来完成的话是非常难的,一般是写多个DELETE语句来完成这个操作。如下:

DELETE FROM shop_car WHERE shop_id = 132475 ;
DELETE FROM shop_car WHERE shop_id = 132568 ;
DELETE FROM shop_car WHERE shop_id = 165897 ;

能不能一次性完成这些语句呢?答案是能的,mysql允许使用批处理命令来同时执行多个sql命令,在JDBC中使用的方式如下:

1.使用Statement来执行批处理命令:
Statement stmt = conn.createStatement() ;
//添加多个sql命令
stmt.addBatch("DELETE FROM shop_car WHERE shop_id = 132475") ;
stmt.addBatch("DELETE FROM shop_car WHERE shop_id = 132568") ;
stmt.addBatch("DELETE FROM shop_car WHERE shop_id = 165897") ;
//执行批处理命令
stmt.executeBatch() ;

2.使用PreparedStatement来执行批处理命令:
String sql = "DELETE FROM shop_car WHERE shop_id = ?" ;
PreparedStatement pstmt = conn.preparedStatement(sql) ;
//添加批处理命令1
pstmt.setInt(132475) ;
pstmt.addBatch() ;
//添加批处理命令2
pstmt.setInt(165897) ;
pstmt.addBatch() ;
//添加批处理命令3
pstmt.setInt(132568) ;
pstmt.addBatch() ;
//执行批处理命令
pstmt.executeBatch() ;

2.批处理命令结合事务:

//JDBC的初始化步骤
...
//添加批处理命令
Statement stmt = conn.createStatement() ;
stmt.addBatch...
...
//获取当前事务自动提交状态
boolean isAutoCommit = conn.getAutoCommit() ;
//设置当前事务取消自动提交
conn.setAutoCommit(false) ;
//执行批处理命令
stmt.executeBatch() ;
//如果想要取消批处理命令操作,可以回滚事务到事务开始之前的状态
conn.rollback() ;
//如果不想取消,也要手动提交
conn.commit() ;
//最后在事务使用完毕之后需要将事务提交方式还原到之前的状态
conn.setAutoCommit(isAutoCommit) ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值