java事务处理

一.什么是事务 
事务是应用程序中一系列严密的操做,全部操做必须成功完成,不然在每一个操做中所做的全部更改都会被撤消。也就是事务具备原子性,一个事务中的一系列的操做要么所有成功,要么一个都不作。 
事务的结束有两种,当事务中的因此步骤所有成功执行时,事务提交。若是其中一个步骤失败,将发生回滚操做,撤消撤消以前到事务开始时的因此操做。 
二.事务的 ACID 
事务具备四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。 
1 、原子性 
事务是数据库的逻辑工做单位,事务中包含的各操做要么都作,要么都不作 
2 、一致性 
事 务执行的结果必须是使数据库从一个一致性状态变到另外一个一致性状态。所以当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。若是数据库系统 运行中发生故障,有些事务还没有完成就被迫中断,这些未完成事务对数据库所作的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。 
3 、隔离性 
一个事务的执行不能其它事务干扰。即一个事务内部的操做及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 
4 、持续性 
也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操做或故障不该该对其执行结果有任何影响。java

Java中的事务处理数据库

通常状况下,J2EE应用服务器支持JDBC事务、JTA(Java Transaction API)事务、容器管理事务。通常状况下,最好不要在程序中同时使用上述三种事务类型,好比在JTA事务中嵌套JDBC事务。第二方面,事务要在尽量短的时间内完成,不要在不一样方法中实现事务的使用。下面咱们列举两种事务处理方式服务器

一、JavaBean中使用JDBC方式进行事务处理
  在JDBC中怎样将多个SQL语句组合成一个事务呢?在JDBC中,打开一个链接对象Connection时,缺省是auto-commit模式,每一个SQL语句都被看成一个事务,即每次执行一个语句,都会自动的获得事务确认。为了能将多个SQL语句组合成一个事务,要将auto-commit模式屏蔽掉。在auto-commit模式屏蔽掉以后,若是不调用commit()方法,SQL语句不会获得事务确认。在最近一次commit()方法调用以后的全部SQL会在方法commit()调用时获得确认。session

public int delete(int sID) {
 dbc = new DataBaseConnection();
 Connection con = dbc.getConnection();
 try {
  con.setAutoCommit(false);// 更改JDBC事务的默认提交方式
  dbc.executeUpdate("delete from bylaw where ID=" + sID);
  dbc.executeUpdate("delete from bylaw _content where ID=" + sID);
  dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID);
  con.commit();//提交JDBC事务
  con.setAutoCommit(true);// 恢复JDBC事务的默认提交方式
  dbc.close();
  return 1;
 }
 catch (Exception exc) {
  con.rollBack();//回滚JDBC事务
  exc.printStackTrace();
  dbc.close();
  return -1;
 }
}

二、SessionBean中的JTA事务
  JTA 是事务服务的 J2EE 解决方案。本质上,它是描述事务接口(好比 UserTransaction 接口,开发人员直接使用该接口或者经过 J2EE 容器使用该接口来确保业务逻辑可以可靠地运行)的 J2EE 模型的一部分。JTA 具备的三个主要的接口分别是 UserTransaction 接口、TransactionManager 接口和 Transaction 接口。这些接口共享公共的事务操做,例如 commit() 和 rollback(), 可是也包含特殊的事务操做,例如 suspend(),resume() 和 enlist(),它们只出如今特定的接口上,以便在实现中容许必定程度的访问控制。例如,UserTransaction 可以执行事务划分和基本的事务操做,而 TransactionManager 可以执行上下文管理。

  应用程序能够调用UserTransaction.begin()方法开始一个事务,该事务与应用程序正在其中运行的当前线程相关联。底层的事务管理器实际处理线程与事务之间的关联。UserTransaction.commit()方法终止与当前线程关联的事务。UserTransaction.rollback()方法将放弃与当前线程关联的当前事务。并发

public int delete(int sID) {
 DataBaseConnection dbc = null;
 dbc = new DataBaseConnection();
 dbc.getConnection();
 UserTransaction transaction = sessionContext.getUserTransaction();//得到JTA事务
 try {
  transaction.begin(); //开始JTA事务
  dbc.executeUpdate("delete from bylaw where ID=" + sID);
  dbc.executeUpdate("delete from bylaw _content where ID=" + sID);
  dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID);
  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;
 }
}

以上代码来自网上,若有错误,尽情谅解!线程

相关文章
相关标签/搜索