• 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){

     

    }

     

     

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

  • 相关阅读:
    轮播效果
    获取用户请求过来的URL
    前端框架——AmazeUI学习
    评论功能——多说插件学习
    SqlServer中——查找杀死阻塞进程
    Java 时区(转)
    大型网站技术演进的思考(转)
    elasticsearch threadpool
    UML 类图
    elasticsearch No node available
  • 原文地址:https://www.cnblogs.com/JSWBK/p/4979803.html
Copyright © 2020-2023  润新知