Java EE中事务处理

本文详细解释了在数据库操作中如何使用事务管理确保数据一致性,包括设置自动提交、执行SQL语句、提交或回滚事务的过程。

1、事务
  情景:在银行转账时,要对数据库进行两个操作,即将一个账户的钱减少,将另一个账户的钱增多。但是由于操作的先后顺序,如果在两个操作之间发生故障,则会导致数据不一致。因此,需要设计一个事务,在两条语句都被执行成功后,数据修改才被真正提交(Commit)放入数据库,否则数据操作回滚(Rollback)。
  在默认情况下,executeUpdate函数会在数据库中提交改变的结果,此时,可以用Connection来定义该函数是否自动提交改变结果,并进行事务的提交或者回滚。下面来看一段代码:

  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.Statement;
  public class Transaction {
  public static void main(String[] args) throws Exception {
  Connection conn = null;
  try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            conn = DriverManager.getConnection("jdbc:odbc:DSSchool");
            Statement stat = conn.createStatement();
            conn.setAutoCommit(false);// 设置为不要自动提交
            String sql1 = "update Tstudent set age=25 where id=4";
            String sql2 = "update Tstudent set name='suuw150'  where id=4";
            stat.executeUpdate(sql1);
            stat.executeUpdate(sql2);
            conn.commit(); // 提交以上sql1,sql2事务
  } catch (Exception ex) {
  conn.rollback(); // 回滚
  } finally {
  conn.close();
         }
     }
  }
从以上代码可以看出,Connection中可以设置executeUpdate不要自动提交,代码如下:
  conn.setAutoCommit(false);
 以下代码的意思是是在两条sql语句运行后,提交这个操作:
   stat.executeUpdate(sql1);
   stat.executeUpdate(sql2);


发生异常后,执行后的修改将会回退:
  conn.rollback();
这样就保证了两条语句要么全部执行,要么全部不执行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suwu150

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值