使用的是MySQL 8.0 InnoDb引擎,JFinal 4.9,在Action增加了@Before(Tx.class)注解,执行的代码如下:
Db.update("update test set name = '123' where id = 1");
Db.update("create table test2 like test");
Db.update("update test3 set name = '345' where id = 1"); //test3表不存在,执行到这一句抛出异常,但第1、2句仍然执行成功,事务失效
如果把这三句SQL用分号合并成一个字符串执行,事务就起作用,分开三句分别执行,事务就失效。
怎么解决这个问题呢?谢谢!
项目:JFinal
Db.tx(new IAtom() {
public boolean run() throws SQLException {
。。。。。。
}
});
如果成功,说明是你自己将SQL异常处理掉了,而没有抛给JFinal处理。
文档中有事务的说明,仔细看。