JDBC事務(wù)級別,請大家多知道知道
發(fā)表時間:2023-08-17 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]JDBC事務(wù)級別為了解決與“多個線程請求相同數(shù)據(jù)”相關(guān)的問題,事務(wù)之間用鎖相互隔開。多數(shù)主流的數(shù)據(jù)庫支持不同類型的鎖;因此,JDBC API 支持不同類型的事務(wù),它們由 Connection 對象指...
JDBC事務(wù)級別
為了解決與“多個線程請求相同數(shù)據(jù)”相關(guān)的問題,事務(wù)之間用鎖相互隔開。多數(shù)主流的數(shù)據(jù)庫支持不同類型的鎖;因此,JDBC API 支持不同類型的事務(wù),它們由 Connection 對象指派或確定。在 JDBC API 中可以獲得下列事務(wù)級別:
TRANSACTION_NONE 說明不支持事務(wù)。
TRANSACTION_READ_UNCOMMITTED 說明在提交前一個事務(wù)可以看到另一個事務(wù)的變化。這樣臟讀、不可重復(fù)的讀和虛讀都是允許的。
TRANSACTION_READ_COMMITTED 說明讀取未提交的數(shù)據(jù)是不允許的。這個級別仍然允許不可重復(fù)的讀和虛讀產(chǎn)生。
TRANSACTION_REPEATABLE_READ 說明事務(wù)保證能夠再次讀取相同的數(shù)據(jù)而不會失敗,但虛讀仍然會出現(xiàn)。
TRANSACTION_SERIALIZABLE 是最高的事務(wù)級別,它防止臟讀、不可重復(fù)的讀和虛讀。
您可能想知道,為什么不是所有事務(wù)都運行在 TRANSACTION_SERIALIZABLE 模式以保證最高程度的數(shù)據(jù)完整性呢?問題在于,和處理多線程編程有關(guān)的問題相似,事務(wù)保護(hù)的級別越高,性能損失就越大。
假定您的數(shù)據(jù)庫和 JDBC 驅(qū)動程序支持這個特性,則給定一個 Connection 對象,您可以明確地設(shè)置想要的事務(wù)級別:
con.setTransactionLevel(TRANSACTION_SERIALIZABLE) ;
您還可以確定當(dāng)前事務(wù)的級別:
if(con.getTransactionLevel() == TRANSACTION_SERIALIZABLE)
System.out.println("Highest Transaction Level in operation.") ;