JDBC對事務的使用(包括自動提交,回滾等知識)
阿新 • • 發佈:2019-02-14
首先得清楚什麼時候使用事務。
當你需要一次執行多條SQL語句時,可以使用事務。通俗一點說,就是,如果這幾條SQL語句全部執行成功,則才對資料庫進行一次更新,如果有一條SQL語句執行失敗,則這幾條SQL語句全部不進行執行,這個時候需要用到事務。
其次才是事務的具體使用。
1.獲取對資料庫的連線(程式碼這裡省略了吧,網上太多了,對各種資料庫的連線的都有)
2.設定事務不自動提交(預設情況是自動提交的)
1.回滾的目的是什麼呢?
目的是使得sql1,sql2。。。等操作要麼全部執行成功,要麼全部執行不成功,這也是為什 麼把這幾個sql語句當成一個事務來處理的目的。
2.回滾從哪裡開始回滾,我如何控制回滾的起始點。
當你需要一次執行多條SQL語句時,可以使用事務。通俗一點說,就是,如果這幾條SQL語句全部執行成功,則才對資料庫進行一次更新,如果有一條SQL語句執行失敗,則這幾條SQL語句全部不進行執行,這個時候需要用到事務。
其次才是事務的具體使用。
1.獲取對資料庫的連線(程式碼這裡省略了吧,網上太多了,對各種資料庫的連線的都有)
2.設定事務不自動提交(預設情況是自動提交的)
conn.setAutoCommit(false); //其中conn是第一步獲取的隨資料庫的連線物件。
3.把想要一次性提交的幾個sql語句用事務進行提交
Statement stmt = null ;
stmt = conn.createStatement();
stmt.executeUpdate(sql1);
stmt.executeUpdate(Sql2);
conn.commit(); //使用commit提交事務
4.捕獲異常,進行資料的回滾(回滾一般寫在catch塊中)
catch(Exception e)
{
...
try
{
conn.rollback();
} catch(Exception e)
{...}
}
5.把事務再改成自動提交(預設狀態)
conn.setAutoCommit(true);
解答各種疑問 1.回滾的目的是什麼呢?
目的是使得sql1,sql2。。。等操作要麼全部執行成功,要麼全部執行不成功,這也是為什 麼把這幾個sql語句當成一個事務來處理的目的。
2.回滾從哪裡開始回滾,我如何控制回滾的起始點。
其實是可以設定儲存點的
Savepoint piont = conn.setSavepoint();
conn.rollback(point);
如果你沒有設定儲存點,他會回滾到你設定禁止事務自動提交的時候,因為你是先設定禁止自動提交的,再進行executeUpdate(sql)的,所以他會回滾到你的所有執行的這幾個sql語句前的狀態。