Orcale 事务

银行的转账业务(a转钱给b),原理上是修改表中的余额字段

Step1:的余额中减掉响应的金额

Step2:b的余额加上响应的金额

 

如果Step1step2之间发生了异常 比如断电 ,地震等不可逆现象将会导致A的钱被扣了但是B的钱没有增加 

这样显然不行

 

人们就会想一种办法 让Step1 Step2 同时成功或者同时失败

 

这就产生了事务

事务具有原子性不可分割性 要么成功要么失败 不可能一件事情成功了 另一件事情失败了

那么在java中如何将2条或者2条以上的 dml 语句组合成一个事物呢?

(所谓dml语句既 插入,修改,删除 数据)

 

1:将自动提交关闭 (oracle默认的是自动提交事务)

Connection里面的 setAutoCommit(false) 设为false

 

2:dml语句

 

3:抓异常 

 

4:在异常里面回滚事物

 

Connection rollback();

 

代码如下:

 

try {

//加载驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

} catch (ClassNotFoundException e2) {

e2.printStackTrace();

}

Connection conn=null;

try {

//获得连接

conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");;

//设置不自动提交事物

conn.setAutoCommit(false);

//dm1语句1

PreparedStatement ps=conn.prepareStatement("update emp set sal=sal-1000 where  ename='KING'");

ps.executeUpdate();

//dm1语句2

PreparedStatement ps2=conn.prepareStatement("update emp set sal=sal+1000 where  ename='SMITH'");

ps2.executeUpdate();

} catch (SQLException e) {

e.printStackTrace();

try {

//回滚事物

conn.rollback();

} catch (SQLException e1) {

e1.printStackTrace();

}

}catch(Exception e){

 

}

 

 

注意 事务 只能在同一链接中。

原文地址:https://www.cnblogs.com/JSWBK/p/4979803.html