一、事務的基本概念
創新互聯建站主營湘陰網站建設的網絡公司,主營網站建設方案,手機APP定制開發,湘陰h5微信小程序開發搭建,湘陰網站營銷推廣歡迎湘陰等地區企業咨詢
數據庫是一個多用戶使用的共享資源。當多個用戶并發地存取數據的時候,在數據庫中就會產生多個用戶同時存取同一數據的情況。若對并發操作不加控制,就可能會產生讀取和存儲不正確的數據,破壞數據的一致性。
而事務是并發控制的基本單位。所謂事務,即一個操作序列。這些操作要么都執行,要么都不執行,它是一個不可分割的工作單位。比如銀行轉賬工作:從一個賬戶扣款,并使用另一個賬戶收款,這兩個操作要么都執行,要么都不執行,因此應該把它們看作是一個事務。
事務是數據庫維護數據一致性的單位,在每個事務結束時,都能保持數據的一致性。
對于編程人員來說,可以把數據庫事務看作是一組sql語句,這組sql語句是一個邏輯工作單元,它們是不可分割的,它們的執行結果應該作為一個整體永久修改一個數據庫的內容或者作為一個整體取消對數據庫的修改。
二、事務的四個基本特征
1.原子性
原子性是指事務中包含的操作都被看作是一個邏輯單元,這個邏輯單元中的操作要么全部成功,要么全部失敗。這也意味著事務中的所有元素作為一個整體提交或回滾。事務的所有元素是不可分割的,是一個完整的操作。
2.一致性
一致性是指事務開始之前和事務結束以后數據庫都處于一致性狀態,數據庫的完整性約束沒有被破壞。
3.隔離性
隔離性是指對數據庫進行修改的多個事務是彼此隔離的。這說明事務必須是獨立的,不應該以任何形式影響其他事務
4.持久性
持久性是指事務完成之后對于數據庫的影響是永久的,該修改真實地修改了數據庫,即使數據庫出現故障也會一直保留。
三、與SQL相關的事務語句
開始事務:BEGIN TRANSACTION
提交事務:COMMIT TRANSATION
回滾事務:ROLLBACK TRANSATION
package com.eduask.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /*將要測試的邏輯 保存一個用戶Tom的基本信息和Tom的地址信息 分別通過兩個java方法插入到用戶表和地址表中 在插入地址表的時候人為造成一個異常 觀察結果 */ public class TransactionTest { //創建一個getConnection()用來獲取數據庫的連接 public static Connection getConnection(){ Connection conn = null; try { Class.forName("com.MySQL.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdemo","root","root"); } catch (Exception e) { e.printStackTrace(); } return conn; } public static void insertUserData(Connection conn) throws SQLException{ String sql = "insert into tbl_user(id,name,password,email) " + "values(10,'Tom','123456','tom@gmail.com')"; Statement st = conn.createStatement(); int count = st.executeUpdate(sql); System.out.println("向用戶插入了 "+ count + " 條記錄"); } public static void insertAddressData(Connection conn) throws SQLException{ String sql = "insert into tbl_address(id,city,country,user_id) " + "values(1,'ShangHai','China','10')"; Statement st = conn.createStatement(); int count = st.executeUpdate(sql); System.out.println("向地址表中插入了 "+ count + " 條記錄"); } public static void main(String[] args) { Connection conn = null; try { conn = getConnection(); conn.setAutoCommit(false); insertUserData(conn); insertAddressData(conn); conn.commit(); } catch (SQLException e) { System.out.println("=========捕獲到SQL異常========="); e.printStackTrace(); try { conn.rollback();//回滾事務,保證數據庫數據的一致性 System.out.println("=========事務回滾成功========="); } catch (Exception e2) { e2.printStackTrace(); } }finally{ try { if (conn != null) { conn.close(); } } catch (Exception e3) { e3.printStackTrace(); } } } }
本文題目:JDBC編程的事務處理
本文來源:http://vcdvsql.cn/article32/gghpsc.html
成都網站建設公司_創新互聯,為您提供App設計、營銷型網站建設、網站內鏈、域名注冊、App開發、外貿網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯