请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

猿媛之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3352|回复: 0

JDBC处理事务的方法

[复制链接]

44

主题

48

帖子

198

积分

注册会员

Rank: 2

积分
198
发表于 2016-1-13 21:33:24 | 显示全部楼层 |阅读模式
   一个事务是由一条或多条对数据库操作的SQL语句所组成的一个不可分割的工作单元,只有当事务中的所有操作都正常执行完了,整个事务才会被提交给数据库。在JDBC中,一般是通过commit()方法或是rollback()方法来结束事务的操作。其中commit()方法表示完成对事务的提交,rollback()方法表示完成事务回滚,多用于在处理事务的过程中出现了异常的情况,这两种方法都位于java.sql.Connection类中。一般而言,事务默认操作是自动提交,即操作成功后,系统将自动调用commit()方法,否则将调用rollback()方法。
   当然,在JDBC中,也可以通过调用setAutoCommit(false)方法来禁止自动提交,然后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()方法实现整体提交,如果其中一个表达式操作失败,就会抛出异常而不会调用commit()方法。在这种情况下就可以在异常捕获的代码块中调用rollback()方法进行事务回滚。通过此种方法可以保持对数据库的多次操作后,数据仍然保持一致性。示例代码如下:
  1. import java.sql.*;
  2. public class Test{   
  3.     public static void main(String[] args) throws Exception {
  4.              String user = "user1";
  5.                  String password = "pwd1";
  6.                  String url = "jdbc:mysql://localhost:3306/Test";
  7.                  String driver = "com.mysql.jdbc.Driver";
  8.                  Connection con = null;
  9.                  Statement stmt = null;
  10.                  ResultSet rs = null;
  11.                  try{
  12.                          Class.forName(driver);
  13.                          con = DriverManager.getConnection(url, user, password);       
  14.                          con.setAutoCommit(false); //禁止自动提交
  15.                         stmt=con.createStatement();
  16.                         stmt.addBatch("insert into Employee values(3,'James3',26)");
  17.                         stmt.addBatch("delete from Employee where id=1");
  18.                         stmt.executeBatch();
  19.                         con.commit(); //提交事务
  20.                  }
  21.                  catch(SQLException e1){
  22.                          if(con!=null)
  23.                                  //事务回滚
  24.                                  con.rollback();
  25.                  }finally{         
  26.              try
  27.              {
  28.                  if(rs != null) rs.close();
  29.                  if(stmt != null) stmt.close();
  30.                  if(con != null) con.close();
  31.              }
  32.              catch(SQLException e)
  33.              {
  34.                  System.out.println(e.getMessage());
  35.              }            
  36.          }                 
  37.     }
  38. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|猿媛之家    

GMT+8, 2020-2-28 13:51 , Processed in 0.216732 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表