JAVA中處理事務的程序--多條更新SQL語句的執行(包括回滾) .


轉自:http://blog.csdn.net/fafeiboy/article/details/2734889

 在與數據庫操作時,如果執行多條更新的SQL語句(如:update或insert語句),在執行第一條后如果出現異常或電腦斷電,

則后面的SQL語句執行不了,這時候設定我們自己提交SQL語句,不讓JDBC自動提交,格式為:

conn.setAutoCommit(false);

執行多條SQL語句;

conn.commit();

//恢復自動提交模式

conn.setAutoCommit(true);

代碼示例:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestTransaction {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Connection con = null;
  Statement stmt = null;
  ResultSet rs = null;
  PreparedStatement ps = null;
  try {
   Class.forName("com.mysql.jdbc.Driver");
   con = DriverManager.getConnection(
     "jdbc:mysql://localhost:3306/mydb", "root", "root");
   System.out.println("連接數據庫成功!");
   stmt = con.createStatement();
   // JAVA默認為TRUE,我們自己處理需要設置為FALSE,並且修改為手動提交,才可以調用rollback()函數
   con.setAutoCommit(false);
   stmt.addBatch("insert into people values(078,'ding','duo')");
   stmt.addBatch("insert into people values(30,'nokia','ddd')");
   stmt.executeBatch();
   // 事務提交
   con.commit();
   // 設置為自動提交,改為TRUE
   con.setAutoCommit(true);

   /*
    * String sql = "select * from people"; rs = stmt.executeQuery(sql);
    * while(rs.next()){ System.out.println(rs.getString("id") + " " +
    * rs.getString("name")); }
    */
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException se) {
   se.printStackTrace();
   try {
    // 產生的任何SQL異常都需要進行回滾,並設置為系統默認的提交方式,即為TRUE
    if (con != null) {
     con.rollback();
     con.setAutoCommit(true);
    }
   } catch (SQLException se1) {
    se.printStackTrace();
   }
  } finally {
   try {
    if (rs != null) {
     rs.close();
     rs = null;
    }
    if (stmt != null) {
     stmt.close();
     stmt = null;
    }
    if (con != null) {
     con.close();
     con = null;
    }
   } catch (SQLException se) {
    se.printStackTrace();
   }
  }
 }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM