atitti 資料庫
事務處理
attilax總結
1.1.
為什麼要傳遞connection?
11.2.
兩種事務
處理方式,一種是程式設計式
事務處理;一種是宣告
...2
1.3.
事務隔離級別
21.4.
事務傳播行為
21.5.
事務的回滾規則
31.6.
宣告式事務唯一不足地方是,方法級別,無法做到像程式設計式事務那樣可以作用到**塊級別。
31.7.
事務對影響記錄條數的影響,好像沒影響,回滾了也提示修改了一條。
callback沒有也不關係。。只要不
commit
,好像就會自動回滾的。
4在前面的概述中我們知道, jdbc事務處理的作用物件為connection, 因此要想控制操作在同乙個事務裡面,
我們必須要傳遞connection, 確保使用的是同乙個connection.
還不是用connection
void setautocommit(boolean autocommit)
throws sqlexception將此連線的自動提交模式設定為給定狀態。如果連線處於自動提交模式下,則將執行其所有 sql 語句,並將這些語句作為單獨的事務提交。否則,其 sql 語句將成組地進入通過呼叫 commit 方法或 rollback 方法終止的事務中。預設情況下,新的連線處於自動提交模式下。
提交發生在語句完成或執行下一條語句時,以先發生的情況為準。在語句返回 resultset 物件的情況下,該語句在已檢索完最後一行 resultset 物件或已關閉 resultset 物件時完成。在更複雜的情況下,單個語句可以返回多個結果和輸出引數值。在這些情況下,提交發生在檢索到所有結果和輸出引數值後。
注:如果在事務處理期間呼叫此方法,則提交該事務。
1. // 開啟 事務
2. connection conn = jdbcutils.getconnection();
3. conn.setautocommit(false);
1.trycatch(exception e)
隔離級別是指若干個併發的事務之間的隔離程度。transactiondefinition 介面中定義了五個表示隔離級別的常量:
* transactiondefinition.isolation_default:這是預設值,表示使用底層
資料庫
的預設隔離級別。對大部分資料庫而言,通常這值就是transactiondefinition.isolation_read_committed。
* transactiondefinition.isolation_read_uncommitted:該隔離級別表示乙個事務可以讀取另乙個事務修改但還沒有提交的資料。該級別不能防止髒讀和不可重複讀,因此很少使用該隔離級別。
* transactiondefinition.isolation_read_committed:該隔離級別表示乙個事務只能讀取另乙個事務已經提交的資料。該級別可以防止髒讀,這也是大多數情況下的推薦值。
* transactiondefinition.isolation_repeatable_read:該隔離級別表示乙個事務在整個過程中可以多次重複執行某個查詢,並且每次返回的記錄都相同。即使在多次查詢之間有新增的資料滿足該查詢,這些新增的記錄也會被忽略。該級別可以防止髒讀和不可重複讀。
* transactiondefinition.isolation_serializable:所有的事務依次逐個執行,這樣事務之間就完全不可能產生干擾,也就是說,該級別可以防止髒讀、不可重複讀以及幻讀。但是這將嚴重影響程式的效能。通常情況下也不會用到該級別。
所謂事務的傳播行為是指,如果在開始當前事務之前,乙個事務上下文已經存在,此時有若干選項可以指定乙個事務性方法的執行行為。在transactiondefinition定義中包括了如下幾個表示傳播行為的常量:
* transactiondefinition.propagation_required:如果當前存在事務,則加入該事務;如果當前沒有事務,則建立乙個新的事務。
* transactiondefinition.propagation_requires_new:建立乙個新的事務,如果當前存在事務,則把當前事務掛起。
* transactiondefinition.propagation_supports:如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續執行。
* transactiondefinition.propagation_not_supported:以非事務方式執行,如果當前存在事務,則把當前事務掛起。
* transactiondefinition.propagation_never:以非事務方式執行,如果當前存在事務,則丟擲異常。
* transactiondefinition.propagation_mandatory:如果當前存在事務,則加入該事務;如果當前沒有事務,則丟擲異常。
* transactiondefinition.propagation_nested:如果當前存在事務,則建立乙個事務作為當前事務的巢狀事務來執行;如果當前沒有事務,則該取值等價於
transactiondefinition.propagation_required
。這裡需要指出的是,前面的六種事務傳播行為是 spring 從
ejb
中引入的,他們共享相同的概念。而
propagation_nested
是 spring
所特有的。以
propagation_nested
啟動的事務內嵌於外部事務中(如果存在外部事務的話),此時,內嵌事務並不是乙個獨立的事務,它依賴於外部事務的存在,只有通過外部的事務提交,才能引起內部事務的提交,巢狀的
通常情況下,如果在事務中丟擲了未檢查異常(繼承自 runtimeexception 的異常),則預設將回滾事務。如果沒有丟擲任何異常,或者丟擲了已檢查異常,則仍然提交事務。這通常也是大多數開發者希望的處理方式,也是
ejb
中的預設處理方式。但是,我們可以根據需要人為控制事務在丟擲某些未檢查異常時任然提交事務,或者在丟擲某些已檢查異常時回滾事務
後者的最細粒度只能作用到方法級別,無法做到像程式設計式事務那樣可以作用到**塊級別。但是即便有這樣的需求,也存在很多變通的方法,比如,可以將需要進行事務管理的**塊獨立為方法等等。
。**spring事務管理
- 一生奮鬥只為夢的專欄
- 部落格頻道
- csdn.net.html
**spring事務管理
- 一生奮鬥只為夢的專欄
- 部落格頻道
- csdn.net.html
作者::
綽號:老哇的爪子
(全名::
attilax
akbar al rapanui 阿提拉克斯 阿克巴 阿爾 拉帕努伊 )
漢字名:
艾提拉(
艾龍),
email:[email protected]
atiend
事務處理 資料庫事務
事務簡介 事務的作用 事務的作用是將一系列操作作為乙個整體,一但其 現問題,會回滾到事務的開始狀態。即事務維護了資料的完整性和一致性。事務的四個特性 acid 原子性 事務的操作是原子不可分割的。一致性 事務的運算元據保證一致性,不存在一部分改變一部分不改變。隔離性 隔離性是當多個使用者併發訪問資料...
事務處理(二) 資料庫事務
事務的作用是將一系列操作作為乙個整體,一但其中出現問題,會回滾到事務的開始狀態。即事務維護了資料的完整性和一致性。如果不考慮隔離性,事務會出現以下問題。髒讀又稱無效資料的讀出,是指在資料庫訪問中,事務t1將某一值修改,然後事務t2讀取該值,此後t1因為某種原因撤銷對該值的修改,這就導致了t2所讀取到...
資料庫的事務處理
事務是這樣一種機制,它確保多個sql語句被當作單個工作單 元來處理。事務具有以下的作用 事務是完整性的單位,乙個事務的執行是把資料庫從乙個一 致的狀態轉換成另乙個一致的狀態。因此,如果事務孤立執行時 是正確的,但如果多個事務併發交錯地執行,就可能相互干擾,造成資料庫狀態的不一致。在多使用者環境中,資...