JAVA中处理事务的程序--多条更新SQL语句的执行(包括回滚)

在与数据库操作时,如果执行多条更新的SQL语句(如:update或insert语句),在执行第一条后如果出现异常或电脑断电,

则后面的SQL语句执行不了,这时候设定我们自己提交SQL语句,不让JDBC自动提交,格式为:

conn.setAutoCommit(false);

执行多条SQL语句;

conn.commit();

//恢复自动提交模式

conn.setAutoCommit(true);

代码示例:

  1. import java.sql.Connection;  
  2. import java.sql.DriverManager;  
  3. import java.sql.PreparedStatement;  
  4. import java.sql.ResultSet;  
  5. import java.sql.SQLException;  
  6. import java.sql.Statement;  
  7.   
  8. public class TestTransaction {  
  9.   
  10.     /** 
  11.      * @param args 
  12.      */  
  13.     public static void main(String[] args) {  
  14.         // TODO Auto-generated method stub   
  15.         Connection con = null;  
  16.         Statement stmt = null;  
  17.         ResultSet rs = null;  
  18.         PreparedStatement ps = null;  
  19.         try {  
  20.             Class.forName("com.mysql.jdbc.Driver");  
  21.             con = DriverManager.getConnection(  
  22.                     "jdbc:mysql://localhost:3306/mydb""root""root");  
  23.             System.out.println("连接数据库成功!");  
  24.             stmt = con.createStatement();  
  25.             // JAVA默认为TRUE,我们自己处理需要设置为FALSE,并且修改为手动提交,才可以调用rollback()函数   
  26.             con.setAutoCommit(false);  
  27.             stmt.addBatch("insert into people values(078,'ding','duo')");  
  28.             stmt.addBatch("insert into people values(30,'nokia','ddd')");  
  29.             stmt.executeBatch();  
  30.             // 事务提交   
  31.             con.commit();  
  32.             // 设置为自动提交,改为TRUE   
  33.             con.setAutoCommit(true);  
  34.   
  35.             /* 
  36.              * String sql = "select * from people"; rs = stmt.executeQuery(sql); 
  37.              * while(rs.next()){ System.out.println(rs.getString("id") + " " + 
  38.              * rs.getString("name")); } 
  39.              */  
  40.         } catch (ClassNotFoundException e) {  
  41.             e.printStackTrace();  
  42.         } catch (SQLException se) {  
  43.             se.printStackTrace();  
  44.             try {  
  45.                 // 产生的任何SQL异常都需要进行回滚,并设置为系统默认的提交方式,即为TRUE   
  46.                 if (con != null) {  
  47.                     con.rollback();  
  48.                     con.setAutoCommit(true);  
  49.                 }  
  50.             } catch (SQLException se1) {  
  51.                 se.printStackTrace();  
  52.             }  
  53.         } finally {  
  54.             try {  
  55.                 if (rs != null) {  
  56.                     rs.close();  
  57.                     rs = null;  
  58.                 }  
  59.                 if (stmt != null) {  
  60.                     stmt.close();  
  61.                     stmt = null;  
  62.                 }  
  63.                 if (con != null) {  
  64.                     con.close();  
  65.                     con = null;  
  66.                 }  
  67.             } catch (SQLException se) {  
  68.                 se.printStackTrace();  
  69.             }  
  70.         }  
  71.     }  
  72.   
  73. }
原文地址:https://www.cnblogs.com/sideny/p/3387264.html