設定資料庫事務控制的問題
阿新 • • 發佈:2019-02-15
在進行對資料庫儲存這方面程式碼編寫時如果是分段執行需要注意如果過程中發生錯誤而沒有新增事務控制的話就會發生
一、髒讀
指一個執行緒中的事務讀取到了另外一個執行緒中未提交的資料
二、不可重複讀
指一個執行緒中的事務讀取到了另外一個執行緒中提交的UPDATE資料
三、虛度
指一個執行緒中的事務讀取到了另外一個執行緒中提交的INSERT資料
這些問題
然後再說一下事務的特性
事務分為
一、原子性
同一個事務的多條語句是不可分割的
二、一致性
事務必須讓資料的狀態從一個一致性狀態變換到另一個一致性狀態 例如 轉賬
三、隔離性
指在多執行緒環境中,一個執行緒的事務不能被其他執行緒中的事務所打擾
四、永續性
事務一旦被提交之後就要被永久儲存
根據事務的這些特性,如果進行資料庫操作的話應該加上事務控制。
進行操作前先開啟事務 conn.setAutoCommit(false);
然後進行資料庫操作
資料庫操作完畢之後再進行事務結束操作
conn.commit();在這個命令執行之前進行的資料庫操作都是更新的快取而沒有去更改具體的資料庫。如果沒有發生錯誤就會把事務所做的修改提交到資料庫進行修改儲存。
如果其中發生異常了
將事務語句放置於try/catch中 如果發生異常在catch中判斷是不是由於連線conn為空,如果不是則是語句執行期間出錯則需要資料回滾,不能讓它修改資料庫即conn.rollback();
小白理解不當的地方請看到的大神指導