更新時間:2022-08-22 10:36:04 來源:動力節點 瀏覽1685次
IBM® Developer Kit for Java™ JDBC API 中有五個級別的事務隔離。從最不嚴格到最嚴格列出,它們如下:
JDBC_TRANSACTION_NONE
這是一個特殊常量,表示 JDBC 驅動程序不支持事務。
JDBC_TRANSACTION_READ_UNCOMMITTED
此級別允許事務查看對數據的未提交更改。在這個級別上,所有數據庫異常都是可能的。
JDBC_TRANSACTION_READ_COMMITTED
此級別意味著在事務提交之前,事務內部所做的任何更改在事務外部都不可見。這可以防止臟讀成為可能。
JDBC_TRANSACTION_REPEATABLE_READ
此級別意味著讀取的行保留鎖,以便在事務未完成時另一個事務無法更改它們。這不允許臟讀和不可重復讀。幻讀仍然是可能的。
JDBC_TRANSACTION_SERIALIZABLE
表為事務鎖定,因此 WHERE 條件不能被其他向表添加值或從表中刪除值的事務更改。這可以防止所有類型的數據庫異常。
setTransactionIsolation 方法可用于更改連接的事務隔離級別。
一個常見的誤解是 JDBC 規范定義了前面提到的五個事務級別。通常認為 TRANSACTION_NONE 值代表了在沒有承諾控制的情況下運行的概念。JDBC 規范沒有以同樣的方式定義 TRANSACTION_NONE。TRANSACTION_NONE 在 JDBC 規范中定義為驅動程序不支持事務并且不是 JDBC 兼容驅動程序的級別。調用 getTransactionIsolation 方法時從不報告 NONE 級別。
由于 JDBC 驅動程序的默認事務隔離級別是由實現定義的,這個問題稍微復雜了一點。本機 JDBC 驅動程序默認事務隔離級別的默認事務隔離級別為 NONE。這允許驅動程序使用沒有日志的文件,并且您不需要制定任何規范,例如 QGPL 庫中的文件。
本機 JDBC 驅動程序允許您將 JDBC_TRANSACTION_NONE 傳遞給 setTransactionIsolation 方法或指定 none 作為連接屬性。但是,當值為 none 時,getTransactionIsolation 方法總是報告 JDBC_TRANSACTION_READ_UNCOMMITTED。如果這是您的應用程序的要求,那么您的應用程序有責任跟蹤您正在運行的級別。
在過去的版本中,JDBC 驅動程序將通過將事務隔離級別更改為 none 來處理您為自動提交指定 true,因為系統沒有真正的自動提交模式的概念。這是功能的近似值,但并未為所有場景提供正確的結果。不再這樣做了;數據庫將自動提交的概念與事務隔離級別的概念分離。因此,在 JDBC_TRANSACTION_SERIALIZABLE 級別運行并啟用自動提交是完全有效的。唯一無效的場景是在 JDBC_TRANSACTION_NONE 級別運行,而不是處于自動提交模式。當系統未以事務隔離級別運行時,您的應用程序無法控制提交邊界。
IBM i平臺的事務隔離級別的通用名稱與 JDBC 規范提供的名稱不匹配。下表與IBM i平臺使用的名稱匹配,但不等同于 JDBC 規范使用的名稱:
JDBC 級別* | IBM i級 |
---|---|
JDBC_TRANSACTION_NONE | *無或*NC |
JDBC_TRANSACTION_READ_UNCOMMITTED | *CHG 或 *UR |
JDBC_TRANSACTION_READ_COMMITTED | *CS |
JDBC_TRANSACTION_REPEATABLE_READ | *ALL 或 *RS |
JDBC_TRANSACTION_SERIALIZABLE | *RR |
* 在此表中,為清楚起見,JDBC_TRANSACTION_NONE 值與IBM i級別 *NONE 和 *NC 對齊。這不是規范與IBM i級別的直接匹配。如果對此比較感興趣,想了解更多相關知識,不妨來關注一下動力節點的JDBC視頻教程,里面有更豐富的知識等著大家去學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習