1. 程式人生 > >MySQL.JDBC多條資料操作--回滾

MySQL.JDBC多條資料操作--回滾

這幾天好多地方都看到作為程式設計師寫部落格的重要性,所以讓我也投身到革命浪潮中吧

問題

>今天弄javaweb後臺時,遇到需要同時insert多個表的需求,
因為有多條插入語句,第一個插入成功,第二個插入失敗,第二條後的資料沒有插入成功,第一條資料就會變成髒資料,因此要回滾

解決辦法

用的com.mysql.jdbc.Driver

//連線資料庫,conn是我在連線資料庫類中留的getConn方法=,=嘿嘿,怕忘留個記號
Connection conn = DriverManager.getConnection(url,username,password);

conn.setAutoCommit(false);//false為sql操作手動提交,true為每次對資料庫操作時自動提交
try
{ String sql1 = “表1插入資料...”; String sql2 = “表2插入資料...”; stmt.addBatch(sql1); stmt.addBatch(sql2); stmt.executeBatch(); conn.commit();//因為AutoCommit設定為false所以要手動提交 //AutoCommit是true會出現錯誤:"Can't call rollback when autocommit=true" } catch (SQLException e) { try { conn.rollback();//回滾 } catch (SQLException e1) { System.out.println("rollback錯了"
); e1.printStackTrace(); } }

PS:當時沒弄明白的問題

  1. 拼sql字串的時候發現eclipse裡字串不能換行,如果換行要在末尾加引號、第二行用+“內容”的形式
  2. String sql 用與增刪改後,不可以直接將此sql字串改為該表的查詢語句,否則會報錯
  3. ps2.中的錯誤是:can not issue null query sql,我又試了一下,結果又可以了重複利用了

PL/SQL也可以回滾

sql-定義變數:

    //sql:變數
    select @id :=2
    select @jn
:=jname from basicinfoj where jid = @id;

回滾事物:

API : SET XACT_ABORT { ON | OFF }
ON:整個事務將終止並回滾 OFF只回滾產生錯誤的 Transact-SQL 語句,而事務將繼續進行處理

SET XACT_ABORT ON
BEGIN TRAN//標記事務開始
     刪除...
     插入...
     修改...
COMMIT TRAN //提交事務
/*執行過程中如果遇到錯誤,無論哪句遇到錯誤,所有語句都會回滾到BEGIN TRAN之前的狀態*/