用java程序执行JDBC驱动事务,java程序里实现事务,不用在数据库里写事务

本文参考老紫竹的文章,感谢老紫竹

http://www.java2000.net/viewthread.jsp?tid=524

作者:老紫竹

有一次我的需求是要一次性往两个表里同时插入数据,如果有一个插入不成功,则回滚,不许插入,开始想法是用一条insert语句插入两个表,后来是老紫竹和dgqbcht提示用事务和过程,后来老紫竹提供上边的链接,用java程序执行JDBC驱动事务,事半功倍,不用配置数据库,轻松实现需要的功能,以下是我改完在我程序里执行的代码

try 
  {
   dbc.getConnection().setAutoCommit(false); 
   
   sta=dbc.getConnection().createStatement();
   sqlOne = "insert into kk.kkyh(DW,BM,ID,PASSWORD,IP,IDCR,IDCk,IDSC,IDCJ,IDZX) values('"+kk_BlacklistVehicle_UserEnrol_DW+"','"+kk_BlacklistVehicle_UserEnrol_BM+"','"+kk_BlacklistVehicle_UserEnrol_ID+"','"+kk_BlacklistVehicle_UserEnrol_PASSWORD+"','"+kk_BlacklistVehicle_UserEnrol_IP+"','1','1','0','0','0')" ;
   sqlTwo = "insert into kk.kkbm(ID,BM,LRDW) values('"+kk_BlacklistVehicle_UserEnrol_ID+"','"+kk_BlacklistVehicle_UserEnrol_BM+"','"+kk_BlacklistVehicle_UserEnrol_DW+"')" ;
   upj = sta.executeUpdate(sqlOne); 
   upj = sta.executeUpdate(sqlTwo); 
   System.out.println("sqlOne = " + sqlOne);
   System.out.println("sqlTwo = " + sqlTwo);
   
      if(upj>0)
      {
       flag = true ;
      }
      
   dbc.getConnection().commit(); //This commits the transaction and starts a new one. 
   sta.close(); 
   System.out.println("事务处理成功,两条记录全部写入数据库."); 
  } 
  catch (SQLException ex) 
  {
   ex.printStackTrace(); 
   try 
   { 
    dbc.getConnection().rollback(); 
    System.out.println("事务处理失败,两条记录没有写入数据库."); 
   } 
   catch (SQLException se) 
   { 
    se.printStackTrace(); 
   } 
  } 

 以下文字全部摘自老紫竹网站http://www.java2000.net

事务是组合到工作的逻辑单位的操作组。它们用于控制和维护事务中的各项操作的一致性和完整性(尽管系统中可能发生错误)。
对于 Microsoft SQL Server 2005 JDBC Driver,事务可以是本地的,也可以是分布式的。事务还可以使用隔离级别。有关 JDBC 驱动程序支持的隔离级别的详细信息,请参阅了解隔离级别
使用本地事务当事务是单步提交事务时,该事务被视为本地的,并由数据库直接进行处理。JDBC 驱动程序通过使用 SQLServerConnection 类的各种方法支持本地事务,这些方法包括 setAutoCommitcommit 和 rollback。通常由此应用程序显式地管理本地事务,或由 J2EE 应用程序服务器自动管理。
以下实例执行 try 块中包含的两个独立语句的本地事务。这些语句将对 AdventureWorks SQL Server 2005 示例数据库中的 Production.ScrapReason 表运行,并且如果没有引发异常,则将其提交。如果引发异常,catch 块中的代码将回滚此事务。

使用分布式事务分布式事务可在两个或多个联网的数据库上更新数据,同时保留事务处理的重要的原子性、一致性、独立性和稳定性 (ACID) 等属性。JDBC 2.0 Optional API 规范中的 JDBC API 添加了分布式事务支持。分布式事务的管理通常由 J2EE 应用程序服务器环境中的 Java Transaction Service (JTS) 事务管理器自动执行。但是,Microsoft SQL Server 2005 JDBC Driver 支持任意 Java Transaction API (JTA) 兼容的分布式事务管理器下的分布式事务。
JDBC 驱动程序与 Microsoft 分布式事务处理协调器 (Distributed Transaction Coordinator, MS DTC) 无缝集成,通过 SQL Server 2000 和 SQL Server 2005 提供真正的分布式事务支持。MS DTC 是 Microsoft 为 Microsoft Windows 系统提供的分布式事务处理工具。MS DTC 使用 Microsoft 推出的久经考验的事务处理技术来支持 XA 功能,例如完整的两步分布式提交协议和分布式事务的恢复。
有关如何使用分布式事务的详细信息,请参阅了解 XA 事务

 

黑色头发  http://heisetoufa.iteye.com

如果发现本文有误,欢迎批评指正

你可能感兴趣的:(java,sql,SQL Server,jdbc,Microsoft)