概述
每天我們的很多工作都在和數據庫來打交道,進行CRUD,但是你知道怎麼用jdbc來啟動一個事務嗎? :D
這個問法本身就有問題哈,任何我們利用jdbc進行的數據庫操作都在一個事務當中,包括當我們執行一個查詢語句時,查詢語句也是運行在事務當中。但是你知道怎麼利用jdbc將多個操作放入一個事務中嗎?
怎樣啟動一個事務
操作數據庫首先要獲得Connecton,Connection默認是auto commit(自動提交的), 也就是當你執行一個插入語句時, 執行完之後是立馬提交的。假設你的需求需要執行多個插入更新操作而且這些更新插入操作要作為一個事務,要麼全部成功要麼全部失敗,應該怎麼做呢?
自然是首先關閉自動提交模式, 然後執行插入更新操作, 然後commit, 如果期間出現異常則rollback, 最終關閉連接。樣例代碼如下
<code> Connection connection = getConnection();try
{boolean
autoCommit = connection.getAutoCommit(); connection.setAutoCommit(false
); connection.commit(); }catch
(Exception e) { connection.rollback(); }finally
{ connection.setAutoCommit(autoCommit); connection.close(); } /<code>
事務的隔離
我們已經知道了如何將多個數據庫操作放到一個事務中,但是你知道怎麼設置事務的隔離級別?都有哪幾種事務隔離級別嗎?
何謂事務的隔離
所有的數據庫操作都運行在事務當中,理想情況下,這些事務之間應該彼此不受影響。事務的隔離就是指多個事務在併發執行時,事務之間是如何的影響彼此的。影響的程度又引出了事務的隔離級別。數據庫系統是一個共享資源,是被併發訪問的,隔離級別越高,需要耗費的代價越大。
事務隔離級別種類
- Read Uncommited
- Read Commited
- Repeatable Read
- Serializable
設置事務的隔離級別
<code>Connection
.setTransactionIsolation
/<code>
ORM 框架如何實現事務的封裝
知道了前面的介紹,我們就理解了ORM 框架是如何來封裝事務的了,沒有什麼神秘的東西。
Spring 事務
且聽下回分解:D