咨询个问题, 我现在的功能是实现两个自定义SQL修改数据库,用dao.execute(sql); 前面一个执行成功,后面一个执行失败了。。事务报错了返回的异常。但前面那个执行成功的没有回滚,这个问题怎么解决
mysql,100%,然后数据表的引擎是myisam,不支持事务。
来自炫酷的 NutzCN
@wendal 我的是oracle数据
又截图
来自炫酷的 NutzCN
用Trans包起来
来自炫酷的 NutzCN
@wendal //事务统一修改
try {
int count = Trans.exec(new Molecule() {
public void run() {
daoCtl.exeUpdateBySql(dao,sql);//修改标信息
daoCtl.exeUpdateBySql(dao,userAccsql);//修改用户账户信息
daoCtl.add(dao, tenderRecord);//创建投标记录
for(int i=0;i<tenderReceivablePlanList.size();i++){//循环遍历插入收款计划
daoCtl.add(dao,tenderReceivablePlanList.get(i));
}
}
});
} catch (Exception e) {
log.info("数据库操作异常投标失败"+e);
return false;
}
是不是外层还有事务?
来自炫酷的 NutzCN
@wendal 没有 了。。就这么多。daoCtl.add(dao, tenderRecord);//创建投标记录 这行异常后,上面两行都不回滚。只会抛出异常。
Trans类有个debug开关,把日志跳到trace看吧
来自炫酷的 NutzCN
@wendal //事务统一修改
try {
int count = Trans.exec(new Molecule() {
public void run() {
daoCtl.update(dao, tenderInfo);
//daoCtl.exeUpdateBySql(dao,sql);//修改标信息
//daoCtl.exeUpdateBySql(dao,userAccsql);//修改用户账户信息
daoCtl.add(dao, tenderRecord);//创建投标记录
for(int i=0;i<tenderReceivablePlanList.size();i++){//循环遍历插入收款计划
daoCtl.add(dao,tenderReceivablePlanList.get(i));
}
}
});
} catch (Exception e) {
log.info("数据库操作异常投标失败"+e);
return false;
}用这个对象修改数据库可以正常回滚,就是用 dao.execute(sql); 这执行自定义SQL不回滚
看Trans的日志
来自炫酷的 NutzCN