八、JDBC——5-事务处理

5-事务处理

1.JDBC的事务处理

(1)JDBC的事务支持是由Connection提供的,Connection默认打开自动提交,即关闭事务,在这种情况下,每条SQL语句一旦执行,便会立即提交到数据库,永久生效,无法对其进行回滚操作;

(2)调用Connection的setAutoCommit()方法控制改变是否自动提交,可以选择开启事务或者关闭事务;

(3)一旦事务开启后,程序可以创建Statement对象来执行SQL语句(DML语句),但是这些语句虽然会被执行,但是SQL语句所做的修改不会生效,因为事务还没有结束,当所有SQL语句执行成功,可以调用Connection对象的commit()方法来提交事务,成功提交事务以后,这些SQL语句才会生效;如果任一SQL语句执行失败则应该使用Connection的Rollback()方法回滚事务;

(4)当Connection遇到一个未处理的SQLException异常时,系统将会非正常退出,事务也会自动回滚,但如果程序捕获了该异常,则需要在异常处理块中显式的回滚事务;

2.批量更新

(1)批量更新:多条SQL语句将作为一批操作被同时手机,并同时提交;

(2)批量更新的方式:

  1)使用Statement对象的executeLargeBatch()方法;

  2)使用Statement对象的executeBatch()方法;

(3)示例:

  Statement stmt = conn.createStatement();

  //使用Statement收集多条SQL语句

  stmt.addBatch(sql1);

  stmt.addBatch(sql2);

  stmt.addBatch(sql3);

  ...

  //同时执行所有的SQL语句 MySQL需要使用stmt.executeBatch();

  stmt.executeLargeBatch();

(4)如果在批量更新的addBatch()中添加的是select语句,那么程序将出现错误,所以需要在批量更新时添加事务来使程序能够处理这样的事务,即把批量执行看做是同一个事务,当出现错误时,使其回滚到批量更新前的状态:

  //保存当前的自动提交模式

  boolean autoCommit = conn.getAutoCommit();

  //关闭自动提交

  conn.setAutoCommit(false);

  Statement stmt = conn.createStatement();

  //使用Statement同时收集多条SQL

  stmt.addBatch(sql1);

  stmt.addBatch(sql2);

  stmt.addBatch(sql3);

  ...

  //同时提交所有的SQL语句

  stmt.execyteLargeBatch();

  //提交事务

  conn.commit();

  //还原自动提交模式

  conn.setAutoCommit(autoCommit);

转载于:https://www.cnblogs.com/ljiwej/p/7275943.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值