Java中的事务处理

news/2024/5/19 0:01:40 标签: Java, SQL, JDBC, 工作
Java中的事务处理
2007-08-17 23:41

      在数据库操作中,一项事务是指由一条或多条对数据库更新的 sql 语句所组成的一个不可分割的工作单元。只有当事务中的所有操作都正常完成了,整个事务才能被提交到数据库,如果有一项操作没有完成,就必须撤消整个事务。

例如在银行的转帐事务中,假定张三从自己的帐号上把 1000 元转到李四的帐号上,相关的 sql 语句如下:

update account set monery=monery-1000 where name=’zhangsan’

update account set monery=monery+1000 where name=’lisi’

这个两条语句必须作为一个完成的事务来处理。只有当两条都成功执行了,才能提交这个事务。如果有一句失败,整个事务必须撤消。

在 connection 类中提供了 3 个控制事务的方法:

(1)       setAutoCommit(Boolean autoCommit): 设置是否自动提交事务;

(2)       commit(); 提交事务;

(3)       rollback(); 撤消事务;

在 jdbc api 中,默认的情况为自动提交事务,也就是说,每一条对数据库的更新的 sql 语句代表一项事务,操作成功后,系统自动调用 commit ()来提交,否则将调用 rollback ()来撤消事务。

在 jdbc api 中,可以通过调用 setAutoCommit(false) 来禁止自动提交事务。然后就可以把多条更新数据库的 sql 语句做为一个事务,在所有操作完成之后,调用 commit ()来进行整体提交。倘若其中一项 sql 操作失败,就不会执行 commit ()方法,而是产生相应的 sqlexception ,此时就可以捕获异常代码块中调用 rollback ()方法撤消事务。

Try{

       Con = java.sql.DriverManager.getConnection(dburl , dbUser , dbPass);

       Con.setAutoCommit(false);

       Stmt = con.createStatement();

       Stmt.executeUpdate(“update account set monery=monery-1000 where name=’zhangsan’”);

       stmt.executeUpdate(“update account set monery=monery+1000 where name=’lisi’”);

       con.commit();

}catch(Exception ex){

       ex.printStackTrace();

       try{

            con.rollback();

}catch(Exception e){

       e.printStackTrace();

}

}finally{

       try{

            stmt.close();

            con.close();

}catch(Exception e){

       e.printStackTrace();

}

}

 

 


http://www.niftyadmin.cn/n/1040580.html

相关文章

java 删除文件路径下的指定文件

起因: 租赁项目过期或未按指定机器被套用,检测到违反规定,需要删除数据库并删除重要文件 本文主要解决问题:删除文件夹下的指定文件 解决方案: import java.io.File;public class TestMain {public static void main(…

ScrollView嵌套子View的getDrawingCache为空的解决方法

ScrollView嵌套子View的getDrawingCache为空的解决方法 问题 将组件的显示布局改为可以滚动的,然后用ScrollView作为了View的父类,发现View的getDrawingCache返回为null了,组件的滚动是必须要实现的,所以探究一下getDrawingCache为…

win10 windows update禁用后又自动开启

前景: 使用win10系统后 禁用了自动更新系统,但是过不了多久又会提示提示需要更新系统,再打开一看 被设置为了手动 解决方案: 1. win R 输入 services.msc 打开服务, 设置为windows update 为禁用状态 2.win R…

ActionForm的生命周期浅探

看了很多的资料书籍,都提了一下ActionForm的生命周期。例如,在“Programming Jakarta Struts"中是这样描述的:“控制器收到的请求”->“创建或再循环ActionForm”->“调用reset()“->“正确 保存ActionForm”->“由请求组合…

IP数据报的格式

IP协议具有什么功能从数据报的格式中就能够知道,一个IP数据报被分为了首部和数据两个部分,在首部中有20个字节是固定的,还有一些可选字段长度是可变的,下面是IP数据报的具体格式:  IP数据报各个字段的意义  1.版本号   版本…

DispatchAction类的使用

一. 由来 最近用Struts1.x做项目时遇到个问题,对一个表做操作,增删改查什么的,需要定义很多Action对应相应的操作,假如有4个jsp,分别是 user表的增删改查页,理论上就要有4个增删改查Action,一个…

计算机专业要不要考研(转自killua大牛博客)

本文转自:http://blog.csdn.net/jxy859/article/details/6572016 你说:“他们都有很强的开发能力,只是不太喜欢读书,也只是希望混个学历对今后在岗位上晋升有好处”,我可以向你保证,你所说的人绝对不是开发能力很强的人。因为&…

【杂谈】野生在左 科班在右——数据结构学习誓师贴

一. 科班 Vs 野生 这个老生常谈的问题让很多野生码农觉得不公平,在一次次面试中因为学历和那些工作中根本就用不到的知识虐的一脸懵逼,然后除了抱怨什么也做不了。那为什么看起来很多科班同学的编码水平和职场软技能都不如野生码农的逆风局中&#xff0c…