一、JDBC事務配置
JDBC事務是對資料庫操作的一組原子性、一致性、隔離性、持久性操作。在JDBC中使用事務需要先進行事務配置,在連接數據源時設置連接參數:
connection.setAutoCommit(false);
這句代碼表示將自動提交關閉,即開啟事務,否則每個SQL語句都會自動提交,無法形成事務。
二、JDBC事務開始於組成當前的事務
JDBC事務是從調用beginTransaction方法開始的,這個方法需要在創建資料庫連接之後,進行以下操作:
connection.setAutoCommit(false);
開始事務:
connection.beginTransaction();
在事務中執行相關操作:
PreparedStatement ps = connection.prepareStatement(sql); ps.setString(1, "test"); ps.execute();
提交事務:
connection.commit();
三、JDBC事務隔離級別
JDBC事務隔離級別分為四個級別: 讀未提交(READ_UNCOMMITTED)、讀已提交(READ_COMMITTED)、可重複讀(REPEATABLE_READ)、序列化(SERIALIZABLE)。不同隔離級別之間的區別,主要在於事務會話之間的相互影響。
例如,當一個事務正在修改一條數據時,另一個事務不能同時修改此數據。在不同的隔離級別下,這個規定會存在不同的表現:
- READ_UNCOMMITTED: 允許一個事務讀取另一個事務未提交的數據,會發生數據不一致的問題。
- READ_COMMITTED: 一個事務只能讀取另一個事務已經提交的數據。
- REPEATABLE_READ: 確保事務對資料庫查詢的結果是一致的,保證對相同的查詢條件返回相同的結果而不管其他事務對同一資料庫的操作。
- SERIALIZABLE: 事務操作串列化,防止兩個事務同時訪問一個資源。
四、JDBC事務屬於容器事務
JavaEE應用程序運行在容器環境中,容器可以管理應用程序的所有資源,包括JDBC連接資源和JDBC事務資源。JDBC事務是與容器一起工作的,因此可以實現分散式事務。
五、JDBC事務回滾
JDBC事務回滾是指當一個事務發生錯誤時,將事務回滾到事務開始前的狀態,以保證數據的一致性。在JDBC中可以使用以下方法進行事務回滾:
catch (SQLException e) { connection.rollback(); }
六、JDBC事務由什麼控制
JDBC事務由JDBC驅動和底層資料庫共同控制。JDBC驅動通過JDBC API提供的事務方法來管理事務,底層資料庫使用資料庫特定的事務支持方式,例如MySQL使用InnoDB引擎的實現方式為行鎖。
七、JDBC事務使用步驟
在JDBC中使用事務,步驟如下:
- 第一步,獲取連接
- 第二步,開啟事務
- 第三步,執行相關操作
- 第四步,提交事務
- 第五步,關閉連接
// 獲取連接 Connection connection = DriverManager.getConnection(url, user, password); // 開始事務 connection.setAutoCommit(false); // 執行相關操作 PreparedStatement ps = connection.prepareStatement(sql); ps.setString(1, "test"); ps.execute(); // 提交事務 connection.commit(); // 關閉連接 connection.close();
八、JDBC事務描述錯誤的是
JDBC事務遵循ACID原則,是原子性、一致性、隔離性、持久性事務。若資料庫對某一行加鎖而導致死鎖的情況下,恰好該行受到要操作的鎖的影響,則由於資料庫鎖定機制會自動執行回滾,這種情況下會失去部分持久性。
九、JDBC事務四大特性
JDBC事務具有四大特性:原子性、一致性、隔離性、持久性。
- 原子性:事務是一個不可分割的工作單位,事務中的操作要麼全部執行成功,要麼全部執行失敗,不會出現部分執行成功的情況。
- 一致性:事務執行前後,資料庫的完整性約束沒有被破壞。
- 隔離性:事務與事務之間是相互獨立的,在同一時刻,不會同時操作同一數據。
- 持久性:事務執行成功後,對資料庫的修改是永久的,即使系統崩潰或電源故障,數據也不會丟失。
十、JDBC事務屬於容器事務類型
JDBC是與容器一起工作的,事務是容器提供的標準JavaEE服務之一,因此JDBC事務屬於容器事務類型。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/195276.html