JavaEE中JDBC事务控制的疑问
请你看下面的一段伪代码try{//把事务设置为手动提交,自己控制事务ConnectionManager.manualCommitTransaction();//调用目标类...
请你看下面的一段伪代码
try {
// 把事务设置为手动提交,自己控制事务
ConnectionManager.manualCommitTransaction();
// 调用目标类的方法,向数据库插入数据
returnValue = method.invoke(targetObject, args);
// 一切操作成功,提交事务
ConnectionManager.commitTransaction();
} catch (Exception e) {
e.printStackTrace();
// 操作发生异常,回滚事务
ConnectionManager.rollbackTransaction();
}
如果调用目标类的方法失败,那么事务就不会提交,数据就不会
插入到数据库,那么我们的伪代码为什么还要写上
ConnectionManager.rollbackTransaction(); 展开
try {
// 把事务设置为手动提交,自己控制事务
ConnectionManager.manualCommitTransaction();
// 调用目标类的方法,向数据库插入数据
returnValue = method.invoke(targetObject, args);
// 一切操作成功,提交事务
ConnectionManager.commitTransaction();
} catch (Exception e) {
e.printStackTrace();
// 操作发生异常,回滚事务
ConnectionManager.rollbackTransaction();
}
如果调用目标类的方法失败,那么事务就不会提交,数据就不会
插入到数据库,那么我们的伪代码为什么还要写上
ConnectionManager.rollbackTransaction(); 展开
1个回答
展开全部
你就不理解事务处理的流程和处理方式,commit和rollback是一对互斥的处理,一个事务处理里面必须而且只能执行其中一个,成功的事务处理要commit,失败的要rollback
追问
我的意思是说发生异常了,如果不写ConnectionManager.rollbackTransaction();数据同样不会插入到数据库,那么我们的还要写上?
追答
我知道你的意思,可是你说的异常发生点是不可知道的,之前可能已经执行过很多的额sql语句了,然后发生异常了,你没有提交事务,但是数据库的一致性已经被破坏了,这时候必须整个事务撤销,所以就必须使用rollback,而不是你说的出现异常不提交就了事了,什么也不管,事务不是不提交就不会对数据库产生影响的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询