jdbc事务

当Jdbc程序向数据库获得一个Connection对象时,默认情况下这个Connection对象会自动向数据库提交在它上面发送的SQL语句。若想关闭这种默认提交方式,让多条SQL在一个事务中执行,并且保证这些语句是在同一时间共同执行的时,我们就应该为这多条语句定义一个事务。

其中,银行转账这一事例,最能说明,使用事务的重要性了。

update from account set money=money-100where name=‘a’;

update from account set money=money+100 wherename=‘b’;

因为这时,两个账户的增减变化是在一起执行的。现实生活中这种类似于同步通信的例子还有很多,这里,不再赘述。

当然,对于事务的编写,也是要遵守一定的顺序的:

首先,.设置事务的提交方式为非自动提交:

conn.setAutoCommit(false);

接下来,.将需要添加事务的代码放入try,catch块中。

然后,.在try块内添加事务的提交操作,表示操作无异常,提交事务。

conn.commit();

尤其不要忘记,.在catch块内添加回滚事务,表示操作出现异常,撤销事务:

conn.rollback();

最后,设置事务提交方式为自动提交:

conn.setAutoCommit(true);

这样,通过简单的几步,我们就可以完成对事务处理的编写了。

例:定义了一个事务方法并在方法内实现了语句之间的一致性操作

Connection con =null;

Statement st=null;

ResultSet rs=null;

PreparedStatement ps=null;

publicvoid startTransaction(){

con = DBCManager.getConnect();//获取连接对象

try {

//设置事务的提交方式为非自动提交:

con.setAutoCommit(false);

//将需要添加事务的代码一同放入try,catch块中

//创建执行语句

String sql ="delete from me where id = 7";

String sql1 = "update me set name =‘chengong‘ ,age =‘34‘ where id =4";

//分别执行事务

ps = con.prepareStatement(sql);

ps.executeUpdate();

ps = con.prepareStatement(sql1);

ps.executeUpdate();

//在try块内添加事务的提交操作,表示操作无异常,提交事务。

con.commit();

} catch (SQLException e) {

try {

//.在catch块内添加回滚事务,表示操作出现异常,撤销事务:

con.rollback();

} catch (SQLException e1) {

// TODO Auto-generatedcatch block

e1.printStackTrace();

}

e.printStackTrace();

}finally{

try {

//设置事务提交方式为自动提交:

con.setAutoCommit(true);

} catch (SQLException e) {

// TODO Auto-generatedcatch block

e.printStackTrace();

}

DBCManager.release(rs, ps, con);

}

}

时间: 2024-12-28 23:45:42

jdbc事务的相关文章

回滚的意义---JDBC事务回滚探究

JDBC手动事务提交回滚的常见写法一直是rollback写在commit的catch之后: try{ conn.setAutoCommit(false); ps.executeUpdate(); ps.executeUpdate(); conn.commit(); }catch(Exception e){ conn.rollback(); } 但是,这种回滚是没有意义的: 一旦commit前出错, 就不提交了, 回滚无用 一旦commit了, 说明没错, 不用回滚 找到一篇和我观点相同的文章:

JDBC事务管理及SavePoint示例

JDBC API提供了setAutoCommit()方法,通过它我们可以禁用自动提交数据库连接.自动提交应该被禁用,因为只有这样事务才不会自动提交,除非调用了连接的commit()方法.数据库服务器使用表锁来实现事务管理,并且它是一种紧张的资源.因此,在操作完成后应该尽快提交事务.让我们编写另外一个程序,这里我将使用JDBC事务管理特性来保证数据的完整性不被破坏. .......... try { con = DBConnection.getConnection(); // set auto c

Java的JDBC事务详解

一.事务的理解: 1.事务的特性: 1) 原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行. 2) 一致性(consistency):事务在完成时,必须是所有的数据都保持一致状态.在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性. 3) 隔离性(isolation):一个事务的执行不能被其他事务所影响. 4) 持久性(durability):一个事务一旦提交,事物的操作便永久性的保存在DB中.即

JavaEE JDBC 事务

JDBC 事务 @author ixenos 事务 1.概念:我们将一组语句构建成一个事务(trans action),当所有语句顺利执行之后,事务可以被提交(commit):否则,如果其中某个语句遇到错误,那么事务将被回滚,就好像没有任何语句被执行一样 2.需求背景:将多个语句组合成事务的主要原因是为了确保数据库完整性(database integrity) 3.默认情况下,数据库连接处于自动提交模式(autocommit mode),每个SQL语句一旦被执行便被提交给数据库,一旦命令被提交就

JDBC事务控制

JDBC事务控制事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功.例如转账,一方多了,一方少了同时执行.mysql数据库默认事务是自动提交的,即一条SQL语句就是一个单独的事务,是自动提交的.Oracle数据库默认是事务不是自动提交的,没一句都需要手动提交事务,否则默认为都是同一个事务.对于多条sql放在同一个事务中需要使用事务命令start transaction 开启事务(所有增删改查都在临时表中进行) Rollback 回滚事务(取消操作) Commit 提交事

jdbc 事务简单例子

 一.什么是Java事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isolation)和持久性(durability)的缩写.事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效.一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态.隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见.持久性表示已提交的

JDBC事务和数据库事务嵌套的讨论 .

首先必须执行con.setAutoCommit(false)方法,将JDBC事务设置为手动提交,否则手动提交con.commit()无效,手动回滚con.rollback()引发SQLException:AutoCommit 模式设置为“true”时,无法调用回滚操作. 我们执行con.setAutoCommit(false)方法,将JDBC事务设置为手动提交,然后分9种情况讨论JDBC事务和数据库事务. 描述:存储过程里面有一条INSERT语句在数据库事务管理下,而另一条INSERT语句在JD

JavaWeb系列之十三(jdbc事务与连接池)

 1.事务:表示一组操作要么都成功,有一个失败,所有操作都会失败. 在mysql要使用事务,就要先开启事务,语句start transaction,提交事务:commit 回滚事务:rollback. 转账: 2.jdbc事务的操作 (1)操作事务的方法 setAutoCommit(boolean autoCommit) 设置事务的提交方式,默认自动提交,设置为fals不会提交 提交事务commit() 回滚事务rollback() 使用jdbc来完成转账 小金跟小李接一千 (2)设置事务的

day18(JDBC事务&连接池介绍&DBUtils工具介绍&BaseServlet作用)

day18总结 今日思维导图: 今日内容 事务 连接池 ThreadLocal BaseServlet自定义Servlet父类(只要求会用,不要求会写) DBUtils à commons-dbutils ? 事务 ? 事务的四大特性:ACID: mysql中操作事务 jdbc中操作事务 ? ? ? 事务概述 为了方便演示事务,我们需要创建一个account表: CREATE TABLE account( ????id INT PRIMARY KEY AUTO_INCREMENT, ????NA

JDBC 事务控制

一.简介: 前面一遍提到了jdbc事务相关的概念.从中了解到事务应具有ACID特性.所以对于javaweb开发来说,某一个service层的方法,应该是一个事务,应该是具有原子性的.特别是当一个service方法中需要调用多次dao层的方法.应该必须要保证,这些多次调用的dao方法必须是要不全部执行成功.要不全部执行失败.比如说银行业务的service方法的转账方法,需要通过dao调用对源转账户信息进行更新减少指定金额,然后调用dao对目标账户信息进行更新增加指定金额. 那么如下保证在跨dao层