同事问我出现autocommit = true的报错怎么解决,错误日志如下:
出现这种情况,主要是业务逻辑中设置了非自动提交,
conn.setAutoCommit(false);
然后在业务逻辑外做统一的手动提交。
conn.commit();
但是代码运行的时候,没有进业务逻辑。也就是在没有走业务逻辑的时候,它本身默认是自动提交的,不需要我再手动提交它。于是,加个判断:
if(!conn.getAutoCommit()){
conn.commit();
}
看到一个网友说“回滚”的事情,这里也备注一下。
“回滚”出处:Can't call commit when autocommit=true问题的解决方法 - 美国大兵 - 博客园
切记:造成这个报错的原因是用到了“回滚”(commit或者rollback),使用回滚的前提是mysql的自动提交处于关闭状态。