事务的特点:
ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。
Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。

JDBC事务示例:

public int delete(int sID) {
  dbc = new DataBaseConnection();
  Connection con = dbc.getConnection();
  try {
   con.setAutoCommit(false);// 更改JDBC事务的默认提交方式
   dbc.executeUpdate("delete from xiao where ID=" + sID);
   dbc.executeUpdate("delete from xiao_content where ID=" + sID);
   dbc.executeUpdate("delete from xiao_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;
  }
}




在数据库操作中,一项事务是指由一条或多条对数据库更新的sql语句所组成的一个不可分割的工作单元。只有当事务中



的所有操作都正常完成了,整个事务才能被提交到数据库,如果有一项操作没有完成,就必须撤消整个事务。



在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()方法撤消事务。




JTA事务


2.JTA事务


JTA是J2EE事务服务的解决方案、描述了J2EE模型事务接口。JTA具有三个主要的接口:UserTransaction、



TransactionManager、Transaction接口。这些接口共享公共的事务操作,如:commit()、rollback()。同时各自也有自



己的操作。举例说明:



public String delete(String id) {
 String ID = id;
 db = new getConnection();
 db.getConnection();
 UserTransaction transaction = sessionContext.getUserTransaction();//获得JTA事务
 try {
  transaction.begin(); //开始JTA事务
  db.executeUpdate("delete from helloworld where ID=" + ID);
  db.executeUpdate("delete from helloworld _book where ID=" + ID);
  db.executeUpdate("delete from helloworld _user where ID=" + ID);
  transaction.commit(); //提交JTA事务
  db.close();
  return”success”;
 }
 catch (Exception e) {
  try {
   transaction.rollback();//事务回滚
  }
  catch (Exception e) {
   e.printStackTrace();
  }
  exc.printStackTrace();
  db.close();
  return “fail”;
 }
}