更新時間:2022-08-22 10:36:04 來源:動力節(jié)點 瀏覽1890次
IBM® Developer Kit for Java™ JDBC API 中有五個級別的事務(wù)隔離。從最不嚴(yán)格到最嚴(yán)格列出,它們?nèi)缦拢?/p>
JDBC_TRANSACTION_NONE
這是一個特殊常量,表示 JDBC 驅(qū)動程序不支持事務(wù)。
JDBC_TRANSACTION_READ_UNCOMMITTED
此級別允許事務(wù)查看對數(shù)據(jù)的未提交更改。在這個級別上,所有數(shù)據(jù)庫異常都是可能的。
JDBC_TRANSACTION_READ_COMMITTED
此級別意味著在事務(wù)提交之前,事務(wù)內(nèi)部所做的任何更改在事務(wù)外部都不可見。這可以防止臟讀成為可能。
JDBC_TRANSACTION_REPEATABLE_READ
此級別意味著讀取的行保留鎖,以便在事務(wù)未完成時另一個事務(wù)無法更改它們。這不允許臟讀和不可重復(fù)讀。幻讀仍然是可能的。
JDBC_TRANSACTION_SERIALIZABLE
表為事務(wù)鎖定,因此 WHERE 條件不能被其他向表添加值或從表中刪除值的事務(wù)更改。這可以防止所有類型的數(shù)據(jù)庫異常。
setTransactionIsolation 方法可用于更改連接的事務(wù)隔離級別。
一個常見的誤解是 JDBC 規(guī)范定義了前面提到的五個事務(wù)級別。通常認(rèn)為 TRANSACTION_NONE 值代表了在沒有承諾控制的情況下運行的概念。JDBC 規(guī)范沒有以同樣的方式定義 TRANSACTION_NONE。TRANSACTION_NONE 在 JDBC 規(guī)范中定義為驅(qū)動程序不支持事務(wù)并且不是 JDBC 兼容驅(qū)動程序的級別。調(diào)用 getTransactionIsolation 方法時從不報告 NONE 級別。
由于 JDBC 驅(qū)動程序的默認(rèn)事務(wù)隔離級別是由實現(xiàn)定義的,這個問題稍微復(fù)雜了一點。本機(jī) JDBC 驅(qū)動程序默認(rèn)事務(wù)隔離級別的默認(rèn)事務(wù)隔離級別為 NONE。這允許驅(qū)動程序使用沒有日志的文件,并且您不需要制定任何規(guī)范,例如 QGPL 庫中的文件。
本機(jī) JDBC 驅(qū)動程序允許您將 JDBC_TRANSACTION_NONE 傳遞給 setTransactionIsolation 方法或指定 none 作為連接屬性。但是,當(dāng)值為 none 時,getTransactionIsolation 方法總是報告 JDBC_TRANSACTION_READ_UNCOMMITTED。如果這是您的應(yīng)用程序的要求,那么您的應(yīng)用程序有責(zé)任跟蹤您正在運行的級別。
在過去的版本中,JDBC 驅(qū)動程序?qū)⑼ㄟ^將事務(wù)隔離級別更改為 none 來處理您為自動提交指定 true,因為系統(tǒng)沒有真正的自動提交模式的概念。這是功能的近似值,但并未為所有場景提供正確的結(jié)果。不再這樣做了;數(shù)據(jù)庫將自動提交的概念與事務(wù)隔離級別的概念分離。因此,在 JDBC_TRANSACTION_SERIALIZABLE 級別運行并啟用自動提交是完全有效的。唯一無效的場景是在 JDBC_TRANSACTION_NONE 級別運行,而不是處于自動提交模式。當(dāng)系統(tǒng)未以事務(wù)隔離級別運行時,您的應(yīng)用程序無法控制提交邊界。
IBM i平臺的事務(wù)隔離級別的通用名稱與 JDBC 規(guī)范提供的名稱不匹配。下表與IBM i平臺使用的名稱匹配,但不等同于 JDBC 規(guī)范使用的名稱:
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 對齊。這不是規(guī)范與IBM i級別的直接匹配。如果對此比較感興趣,想了解更多相關(guān)知識,不妨來關(guān)注一下動力節(jié)點的JDBC視頻教程,里面有更豐富的知識等著大家去學(xué)習(xí),希望對大家能夠有所幫助。
初級 202925
初級 203221
初級 202629
初級 203743