上代码
try { // 更改JDBC事务的默认提交方式,默认是true,是自动提交;
connection.setAutoCommit(false);
m_hashMap = JsonConvert.JsonToObject(jsonContent, HashMap.class);
akMxFieldInfoDao1.newFieldMxAndDel(bm, m_hashMap);
//提交JDBC事务,如果没问题,这时才真正的删除了;
connection.commit();
// 恢复JDBC事务的默认提交方式
connection.setAutoCommit(true);
int resultInt = 0;
if (resultInt != 0) {
result = new ArrayList<Map<String, Object>>();
result.add(m_hashMap);
} else {
return null;
}
} catch (SQLException e) {
//回滚JDBC事务,出现异常,为保证数据完整性,此次操作回滚,不删除;
connection.rollback();
e.printStackTrace();
}
当添加数据发生异常时,执行回滚,不删除数据。但是这里发生SQL异常它还是删除数据,不执行回滚,求大神解答,谢谢了!
rollback里面有这样一句注释。This method should be used only when auto-commit mode has been disabled。 ######解决了,我在DAO里又写了一次事务,我把它去掉,然后只在service层写就可以了。谢谢各位大侠的回答!######回复 @kycp1 : connection.setAutoCommit(true); 上面这段代码删掉。 可能是你Dao里面还没有执行到删除就抛出异常了######我把它设为手动提交了,但还是没用######
int resultInt = 0; if (resultInt != 0)
你这个意义何在
######没什么意义######
rollback()也是要抛出异常的方法,为什么我没看到你捕获,难道整体还要往外面抛出异常?
######回复 @kycp1 : 哪里抛的,回滚的时候?######catch (SQLException e) { try { connection.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } 也抛了,但还是没有回滚。######瞅了半天,木有看到删除的代码在哪...俺觉得你还是自己调试下代码的好,你都说sql异常,他怎么会做数据库操作...感觉逻辑上就说不通,或者你描述的就是有问题的/不完整的######回复 @kycp1 : 我当然知道你的删除代码在那个方法里,但你有说那个方法的connection对象是如何获取的?里面的逻辑是如何的?异常在哪抛出来的?你都没说啊...问问题还要回答的人挖掘需求那也是太辛苦了######akMxFieldInfoDao1.newFieldMxAndDel(bm, m_hashMap); 删除在这里面,已经封装了bm就是删除的ID,m_hashMap是添加数据######建议 去好好理解事物的概念 。。###### 这代码写得太感人...
你添加出问题了的代码是在事务已经提交之后了,这个时候事务已经结束, 其后的rollback因为不在事务中是没有任何作用的... ######回复 @kycp1 : 最简单的办法, 把commit那句放到catch上的最后一行...######回复 @kycp1 : 缩小事务涉及的范围, 分离出来事务无关的代码...######那我该什么办?把事务提交设为默认?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。