当前位置: 代码迷 >> SQL >> spring事务处理:如果一个事务中有两个SQL,一个成功,另一个失败但被Try catch住了,这时会有什么有关问题
  详细解决方案

spring事务处理:如果一个事务中有两个SQL,一个成功,另一个失败但被Try catch住了,这时会有什么有关问题

热度:87   发布时间:2016-05-05 14:40:10.0
spring事务处理:如果一个事务中有两个SQL,一个成功,另一个失败但被Try catch住了,这时会有什么问题
try {	con.setAutoCommit(false);	//这句让正常执行	con.createStatement().execute("insert into sys_admin values(12,'zhangs','zhangs')");	//这句由于表不存在,所以会报异常	con.createStatement().execute("insert into sys_admin1 values(2,'zhangs','zhangs')");} catch (Exception e) {	e.printStackTrace();}finally{	con.commit();//此处的提交会将第一句提交,第二句由于异常不被提交。}

?以上结果会出现部分提交部分失败的现象,违反了事务的原子性。

SPRING中的场景和以上是类似的。

所以通常的处理是:

try {	con.setAutoCommit(false);	//这句让正常执行	con.createStatement().execute("insert into sys_admin values(121,'zhangs','zhangs')");	//这句由于表不存在,所以会报异常	con.createStatement().execute("insert into sys_admin1 values(2,'zhangs','zhangs')");	con.commit();} catch (Exception e) {	e.printStackTrace();	con.rollback();}finally{}

?

  相关解决方案