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

作者在使用Java编写转账代码时遇到事务未生效的问题,通过检查发现MySQL使用的MyISAM引擎不支持事务,更改表引擎为InnoDB后问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚刚在用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引擎,问题解决

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值