java 事务失效问题记录与解决

刚刚在用java写关于事务操作的转账代码,但是当我故意写了错误的代码,出账还是成功了,入账没成功,事务并没有生效,代码如下

public void pay(String out, String in, Double myMoney) {
        Connection  conn = null;
        PayMoneyDao payDao = new PayMoneyDao();
        //开启事务
        try {
            conn = DataSourceUtils.getConnection();
            conn.setAutoCommit(false);
            //出账
            payDao.out(conn,out,myMoney);
            //故意的错误代码
            //int i = 1/0;
            //入账
            payDao.in(conn,in,myMoney);

        } catch (Exception e) {
            System.out.println(1);
            try {
                if(conn != null){
                    System.out.println(2);
                    conn.rollback();    
                }

            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally{
            try {
                conn.commit();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }   
    }

然后看了一圈,代码并没有问题,突然记起来,mysql是否支持事务,与mysql引擎有关 ,遂检查自己的mysql版本 发现自己的MySQL版本是5.5.53 在 5.5.5*版本之前默认的引擎都是MyISAM 而该引擎是不支持事务的,InnoDB引擎是支持的,然后就去检查表是什么引擎
用指令 show create table TABLENAME指令查看 这里的TABLENAME是自己的表名
发现果然是
这里写图片描述
然后修改了表的引擎,换成了InnoDB引擎,问题解决

猜你喜欢

转载自blog.csdn.net/u013781343/article/details/80158367