明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

JDBC事務(wù)級別,請大家多知道知道

[摘要]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.") ;