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是自己的表名
发现果然是
然后修改了表的引擎,换成了InnoDB引擎,问题解决
下一篇: 谈谈Mysql索引