java事务处理代码 java事件处理机制( 二 )


transaction.commit(); //提交JTA事务
dbc.close();
return 1;
}
catch (Exception exc) {
try {
transaction.rollback();//JTA事务回滚
}
catch (Exception ex) {
//JTA事务回滚出错处理
ex.printStackTrace();
}
exc.printStackTrace();
dbc.close();
return -1;
}
}
java事务处理如果对数据库进行多次操作,每一次的执行或步骤都是一个事务.如果数据库操作在某一步没有执行或出现异常而导致事务失败,这样有的事务被执行有的就没有被执行,从而就有了事务的回滚,取消先前的操作.....
JavaBean中使用JDBC方式进行事务处理
publicintdelete(intsID){
dbc=newDataBaseConnection();
Connectioncon=dbc.getConnection();
try{
con.setAutoCommit(false);//更改JDBC事务的默认提交方式
dbc.executeUpdate("deletefromxiaowhereID="+sID);
dbc.executeUpdate("deletefromxiao_contentwhereID="+sID);
dbc.executeUpdate("deletefromxiao_affixwherebylawid="+sID);
con.commit();//提交JDBC事务
con.setAutoCommit(true);//恢复JDBC事务的默认提交方式
dbc.close();
return1;
}
catch(Exceptionexc){
con.rollBack();//回滚JDBC事务
exc.printStackTrace();
dbc.close();
return-1;
}
}
在数据库操作中 , 一项事务是指由一条或多条对数据库更新的sql语句所组成的一个不可分割的工作单元 。只有当事务中的所有操作都正常完成了,整个事务才能被提交到数据库,如果有一项操作没有完成,就必须撤消整个事务 。
例如在银行的转帐事务中 , 假定张三从自己的帐号上把1000元转到李四的帐号上 , 相关的sql语句如下:
updateaccountsetmonery=monery-1000wherename='zhangsan'
updateaccountsetmonery=monery+1000wherename='lisi'
这个两条语句必须作为一个完成的事务来处理 。只有当两条都成功执行了 , 才能提交这个事务 。如果有一句失败 , 整个事务必须撤消 。
在connection类中提供了3个控制事务的方法:
(1)setAutoCommit(BooleanautoCommit):设置是否自动提交事务;
(2)commit();提交事务;
(3)rollback();撤消事务;
在jdbcapi中,默认的情况为自动提交事务,也就是说,每一条对数据库的更新的sql语句代表一项事务 , 操作成功后 , 系统自动调用commit()来提交 , 否则将调用rollback()来撤消事务 。
在jdbcapi中,可以通过调用setAutoCommit(false)来禁止自动提交事务 。然后就可以把多条更新数据库的sql语句做为一个事务,在所有操作完成之后 , 调用commit()来进行整体提交 。倘若其中一项sql操作失败,就不会执行commit()方法,而是产生相应的sqlexception,此时就可以捕获异常代码块中调用rollback()方法撤消事务 。
java web项目中 大家是怎么做的事务控制呢?spring 那种是可以的java事务处理代码,一般指定用 @Transaction 指定一个service方法的事务,在service方法里面,只有出现异常(这个异常是可以指定的 。),导致这个方法没有正常结束,这个就会数据库回滚 。java事务处理代码你只有把 Update 和insert写在一个方法里,然后把这个方法加上事务控制,那就可以了 。这里面的实现逻辑大概是这样,首先spring获取连接,我们在service方法里进行数据库的操作,然后方法结束,如果正常结束,spring提交事务 , 释放连接 。如果异常结束  , spring 进行回滚 , (这个回滚会把这个service方法内所有的修改操作回滚 。)释放连接 。大体的流程是这样 。至于这些逻辑在数据库层面是如何实现的,我也不知道 。

推荐阅读