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{ }