• Spring事务处理


    主要是两个方面:

      一是开始事务

     conn.setAutoCommit(false);默认是true

      二是提交事务

      conn.commit();

    一、创建一个类

      连接数据库的方法封装在Util包中,获取Connection连接。该类的功能是通过id修改表t_emp 中对应id的acount的值。

      使用Connection的preparestatement方法。

    public class AcountDao {
        public void update(Connection conn,Integer id,Integer count) {    
            String sql="update t_emp set acount=acount+? where id=?";
            PreparedStatement ps=null;
            try {
                ps = conn.prepareStatement(sql);
                ps.setInt(1, count);
                ps.setInt(2, id);
                ps.executeUpdate();    
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }            
        }
    }

    二、创建一个测试类JUnit Test Case

    private AcountDao acountdao=new AcountDao();
        @Test
        public void testUpdate() {
            Connection conn=null;//一个connection对象
            conn=Util.getConn();
            try {
    //            开启事务,需要手动提交
                conn.setAutoCommit(false);
    //      孙悟空向猪八戒转账100元 acountdao.update(conn,
    1, -100);//一个connection对象 int aa=10/0;
    //      猪八戒收到孙悟空的转账的100元 acountdao.update(conn,
    2, 100);//一个connection对象 // 提交事务 conn.commit(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

    这里需要注意:我们前后

     acountdao.update();方法中都有Connection,加上程序刚开始创建的Connection对象,总共是有3个Connection对象。我们要保持着3个
    Connection对象是同一个Connection对象。

    当孙悟空转账后出现了错误,提交的事务的方法就可以回滚,即将执行的操作向回翻滚,回滚到开始事务的时刻,就相当于从来没有执行过。

      

  • 相关阅读:
    PHP 页面编码声明方法详解(header或meta)
    淘客部分功能实现源码
    CSS3动画效果应用
    JavaScript之Tab标签(原始版)
    JavaScript之淡入淡出
    关于响应式布局
    深入理解 SVG 系列(一) —— SVG 基础
    面试题
    随记
    一道经典面试题-----setTimeout(function(){},0)
  • 原文地址:https://www.cnblogs.com/xuesheng/p/7455183.html
Copyright © 2020-2023  润新知