一、事務(wù)的基本概念

創(chuàng)新互聯(lián)建站主營湘陰網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,手機APP定制開發(fā),湘陰h5微信小程序開發(fā)搭建,湘陰網(wǎng)站營銷推廣歡迎湘陰等地區(qū)企業(yè)咨詢
數(shù)據(jù)庫是一個多用戶使用的共享資源。當多個用戶并發(fā)地存取數(shù)據(jù)的時候,在數(shù)據(jù)庫中就會產(chǎn)生多個用戶同時存取同一數(shù)據(jù)的情況。若對并發(fā)操作不加控制,就可能會產(chǎn)生讀取和存儲不正確的數(shù)據(jù),破壞數(shù)據(jù)的一致性。
而事務(wù)是并發(fā)控制的基本單位。所謂事務(wù),即一個操作序列。這些操作要么都執(zhí)行,要么都不執(zhí)行,它是一個不可分割的工作單位。比如銀行轉(zhuǎn)賬工作:從一個賬戶扣款,并使用另一個賬戶收款,這兩個操作要么都執(zhí)行,要么都不執(zhí)行,因此應(yīng)該把它們看作是一個事務(wù)。
事務(wù)是數(shù)據(jù)庫維護數(shù)據(jù)一致性的單位,在每個事務(wù)結(jié)束時,都能保持數(shù)據(jù)的一致性。
對于編程人員來說,可以把數(shù)據(jù)庫事務(wù)看作是一組sql語句,這組sql語句是一個邏輯工作單元,它們是不可分割的,它們的執(zhí)行結(jié)果應(yīng)該作為一個整體永久修改一個數(shù)據(jù)庫的內(nèi)容或者作為一個整體取消對數(shù)據(jù)庫的修改。
二、事務(wù)的四個基本特征
1.原子性
原子性是指事務(wù)中包含的操作都被看作是一個邏輯單元,這個邏輯單元中的操作要么全部成功,要么全部失敗。這也意味著事務(wù)中的所有元素作為一個整體提交或回滾。事務(wù)的所有元素是不可分割的,是一個完整的操作。
2.一致性
一致性是指事務(wù)開始之前和事務(wù)結(jié)束以后數(shù)據(jù)庫都處于一致性狀態(tài),數(shù)據(jù)庫的完整性約束沒有被破壞。
3.隔離性
隔離性是指對數(shù)據(jù)庫進行修改的多個事務(wù)是彼此隔離的。這說明事務(wù)必須是獨立的,不應(yīng)該以任何形式影響其他事務(wù)
4.持久性
持久性是指事務(wù)完成之后對于數(shù)據(jù)庫的影響是永久的,該修改真實地修改了數(shù)據(jù)庫,即使數(shù)據(jù)庫出現(xiàn)故障也會一直保留。
三、與SQL相關(guān)的事務(wù)語句
開始事務(wù):BEGIN TRANSACTION
提交事務(wù):COMMIT TRANSATION
回滾事務(wù):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方法插入到用戶表和地址表中
在插入地址表的時候人為造成一個異常
觀察結(jié)果
*/
public class TransactionTest {
//創(chuàng)建一個getConnection()用來獲取數(shù)據(jù)庫的連接
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();//回滾事務(wù),保證數(shù)據(jù)庫數(shù)據(jù)的一致性
System.out.println("=========事務(wù)回滾成功=========");
} catch (Exception e2) {
e2.printStackTrace();
}
}finally{
try {
if (conn != null) {
conn.close();
}
} catch (Exception e3) {
e3.printStackTrace();
}
}
}
}
本文題目:JDBC編程的事務(wù)處理
本文來源:http://www.chinadenli.net/article32/gghpsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、營銷型網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、域名注冊、App開發(fā)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)