NutzCN Logo
问答 关于事务不回滚问题
发布于 3307天前 作者 qq_e4acb87f 2879 次浏览 复制 上一个帖子 下一个帖子
标签: dao

咨询个问题, 我现在的功能是实现两个自定义SQL修改数据库,用dao.execute(sql); 前面一个执行成功,后面一个执行失败了。。事务报错了返回的异常。但前面那个执行成功的没有回滚,这个问题怎么解决

12 回复

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不回滚

@qq_e4acb87f 都不回滚

看Trans的日志

来自炫酷的 NutzCN

添加回复
请先登陆
回到顶部