事务处理:允许用户对数据库数据进行更改,然后决定是否对更改进行保存或者放弃更改(就是说任务要么全部成功完成,要么全部都不完成)

 
  事务是一组 组合成逻辑工作单元的数据库操作,事务有肯能由很多单个任务构成。在系统执行过程中可能会出现错误(断电,网络故障等),这时对正在进行数据库操作的程序可能会造成数据库操作结果的不完整,事务将控制和维护每个数据库的一致性和完整性
 
  事务处理的主要特征:当系统对数据库执行事务处理时,该任务要么全部成功执行,要么全部都不执行。当写入一些记录时,要么写入所有记录,要么什么都不写;如果在写入其中一个记录时出现了一个失败,那么在事务处理中已写入的记录就会回滚
 
  简单事务处理的一个例子:把钱从A账户转到B账户,这事务有两个任务,一是从A账户取出钱,二是把钱存进B账户,这两项任务必须同时完成,不然一起失败,给予回滚以便保持数据库中状态和原来一致。否则,在执行其中某一个操作时出现停电、网络中断等故障可能会导致了系统只更新了其中一个表的行,另一个表没有更新。所以,数据库支持事务处理,能够将数据库操作组成一个事务,对事务进行控制维护,防止出现数据库不一致。
 
事务的ACID属性如下 
 
  1)原子性:事务所有操作都是原子工作单元,对于数据库数据修改,要么全部完成,要么都不完成,原子性消除了系统处理操作子集的可能性。
  2)一致性:数据从一种正确状态转换到另一种正确状态
  3)隔离性:并发事务所做的修改必须与其他并发事务所作的修改隔离。查看数据时数据所处的状态要么是事务修改它之前的状态,要么是事务修改之后的状态,简单理解就是:防止多个并发更新操作互相干扰,事务在操作数据时与其他事务操作隔离,隔离性一般是通过加锁机制来完成的。
  4)持久性:事务完成之后,它对于系统的影响是永久性的。已提交的更改即使在发生故障时也依然存在。

事务的操作需要进行3步操作:

  1)把数据库连接对象的自动提交SQL操作的属性关闭
  2)执行一系列数据库操作,如果全部成功就提交事务
  3)如果事务中的操作没有全部成功,就回滚整个事务。

 
JDBC中的事务操作:

  Connection conn=null;
       Statement stm=null;
       Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
       String url=.......
       String user=.......
       String password=....
       conn=DriverManager.getConnection(url,user,password);
       conn.setAutoCommit(false);//打开一个连接时,每个sql语句都被当做一个事务处理,每执行一个sql语句都会自动得到事务确认,为了把多个sql语句合成一个事务,必须先把auto-commit这个属性关闭,如果不调用commit()方法,SQL语句不会得到事务确认
       try{
              stm=conn.createStatement();
              String sql1="........"
             stm.execute(sql1);
              String sql2="........";
              stm.execute(sql2);
               conn.commit();
               conn.setAutoCommit(true);
       }catch(Exception ex){
               conn.rollback();
               
       }