关于事务

要想太高自己的能力,就要在用这个东西点之前 ,思考:1.为什么要用它  2.它的优缺点是什么?   3.怎么用? 4.在什么场合用? 等问题,这样的话才不会让自己那么盲目的写,一味的用。。

Java中事务是什么?为什么要用事务?用什么技术处理?使用spring来管理事务的好处是什么?


1.首先要理解什么是事务?

   事务:是访问数据库的一个操作序列,这些就是数据库特有的术语了。懒虫在这里口头解释:就是把多件事情当做一件事情来处理。也就是大家同在一条船上,要活一起活,要over一起over !

2.为什么要用事务?

 首先,举个生活中的在平常不过的事情:

 到银行存钱,于是有这么几个步骤:
       1、把钱交给工作人员;2、工作人员填单;3、将单子给我签字;4、工作人员确认并输入电脑。

要是把钱交给工作人员之后,进行到3我签字了。那哥们突然心脏病发作,over掉了,那,我的钱还没有输入电脑,但我却交了钱又签字确认了,而并没有其他任何记录。我岂不是要亏死了???

于是,在数据库里产生了这么一个术语:事务(Transaction),也就是要么成功,要么失败,并恢复原状。

3.用什么技术处理?

刚开始的时候,我们是这样用的:

Java代码   收藏代码
  1. try{     
  2.   conn=DriverManager.getConnection("jdbc:odbc:grade");     
  3.   defaultCommit=conn.getAutoCommit();     
  4.   conn.setAutoCommit(false);     
  5.   stmt=conn.createStatement();     
  6.   stmt.executeUpdate(strSQL1);     
  7.   stmt.executeUpdate(strSQL2);     
  8.   conn.commit();     
  9.   }     
  10.   catch(Exception   e){     
  11.   conn.rollback();     
  12.   e.printStackTrace();     
  13.   }     
  14.   finally{     
  15.   conn.setAutoCommit(defaultCommit);     
  16.   if(stmt!=null){     
  17.         stmt.close();       
  18.   }     
  19.   if(conn!=null){     
  20.         stmt.close();     
  21.   }     
  22.   }  
就是将自动提交设为false之后,连续的几个数据库操作,如果成功的话,则提交完成一个事务,如果某个发生异常,则回滚。 

这里有一点非常重要,事务是基于数据库链接的。所以在但数据库的情况下,事务操作很简单。

  那么如果表分布在两个不同的数据库中呢?

  例如订单表在订单库中,库存表在库存库中,那么我们如何处理这样的事务呢?

  需要注意,提交也可以遇到错误呀!

try{

  Connection conn1 = getConnection1();

  Connection conn2 = getConnection2();

  // 基于conn1做插入操作

  // 基于conn2做更新操作

  try{

  conn1.commit()

  } catch(SQLExcetion ) {

  conn1.rollback();

  }

  try {

  conn2.commit();

  } catch(SQLException ) {

  conn2.rollbakc();

  // 保证肯定删除刚才插入的订单。

  }

  } catch(SQLException ex) {

  // 如果插入失败,conn1.rollback

  // 如果更新失败,conn1.rollback && conn2.rollback

  } finally {

  conn1.close();

  conn2.close();

  }

看看上述的代码就知道,其实操作非常的复杂,甚至:保证肯定删除刚才插入的订单根本无法保证。

  在上述情况下的事务可以称之为分布式事务,通过上述的代码中事务同时提交处理的部分我们可以得出,要想处理分布式事务,必须有独立于数据库的第三方的事务处理组件。

而Spring的失误处理,底层也就是这样的,只是spring的方式给程序员提供了便捷,AOP,让程序员不要在关心这些重复的try catch ,只需要关心业务代码。 

4.使用spring来管理事务的好处是什么?

spring的方式给程序员提供了便捷,AOP,让程序员不要在关心这些重复的try catch ,只需要关心业务代码。 


这个类:http://blog.csdn.net/without0815/article/details/7759050



    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值