JavaBean中使用JDBC方式进行事务处理
在JavaBean数据库操作中,事务是指由一个或多个更新数据库的sql语句组成的不可分割的工作单元。只有当一个事务中的所有操作都正常完成后,才能将整个事务提交给数据库。如果一个操作没有完成,整个事务必须撤消。我们通过提交commit()或回滚()来结束事务。关于事务操作的方法都在接口java.sql.Connection中
当第一次建立到数据库的连接时,默认情况下,连接处于自动提交模式。在jdbc api中,可以调用setAutoCommit(false)来禁止事务的自动提交。然后可以把更新数据库的多个sql语句当作一个事务,在所有操作完成后调用commit()作为一个整体提交。如果其中一个sql操作失败,将不会执行commit()方法,但是会生成相应的sqlexception。此时,您可以捕获异常代码块,并调用rollback()方法来撤消事务。以下是一个例子;
例如,有两个表,一个用于用户帐户,另一个用于系统帐户。现在,如果一个用户想向系统汇款买东西,他需要下面两条语句:
string SQL 1 = " update user account set monery = monery-1000 where name = ' username ' ";
String SQL 2 = " update sys account set monery = monery+1000 where name = ' sysname ' ";
但如果第一句执行了,第二句执行错误,就会造成不良后果。这可以手动完成以防止这种情况发生:主代码
请尝试{
。
。
。
conn = driver manager . get connection(" ... ");//链接数据库
conn . set auto commit(false);//禁止自动提交交易
stmt = conn.create.....
string SQL 1 = " update user account set money = money-1000 where name = ' usename ' ";
String SQL 2 = " update sys account set monery = monery+1000 where name = ' sysname ' ";
stmt = conn . create statement();
stmt . execute update(SQL 1);
stmt . execute update(SQL 2);
conn . commit();//统一提交。
} catch(SQLException e){
conn . roll back();//如果其中一个sql操作失败,将不执行commit()方法,但会生成相应的sqlexception。此时,您可以捕获异常代码块,并调用rollback()方法来撤消事务。
e . printstacktrace();
}
最后{
if(stmt!= null){
stmt . close();
}
if(conn!= null){
stmt . close();
}
}
0条评论