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