欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-26 12:40:34
...

刚刚在用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是自己的表名
发现果然是
java 事务失效问题记录与解决
然后修改了表的引擎,换成了InnoDB引擎,问题解决