1. 程式人生 > >spring jdbc異常處理原理深度分析

spring jdbc異常處理原理深度分析

1.異常處理 使用傳統JDBC API時,通過java.sql.SQLException型別來包括一切的異常情況,並沒有異常具體告知,如果要得到具體異常內容要通過sqlexception的getErrorcode得到errorcode然後從具體資料庫提供商提供的errorcode列表對比,得到最終的錯誤資訊,同時異常為checked異常,需要客戶端捕獲。 spring jdbc提供了統一異常處理機制,這套機制的基類為DataAccessException,是RuntimeException的一種型別,因此不需要客戶端處理 spring jdbc在使用期間捕獲可能發生的sqlexception(普通jdbc丟擲),通過sqlexceptiontranslator轉譯到spring的資料訪問異常體系,sqlexceptiontranslator具體實現類如下:

sqlerrorcodesqlexception具體處理過程: 1)首先檢查自定義的異常類能不能轉譯異常
2)如果是java 6以上,還會嘗試讓sqlexceptionsubclasstranslator來轉譯 3)使用sqlerrorcodefactory載入的sqlerrorcodes來處理 載入sqlerrorcodes的步驟: 3.1)載入org.springframework.jdbc.support的sql-error-codes.xml,此配置檔案配置不同資料庫廠商自定義的errorcode到spring資料訪問異常體系的對映

4)如果還是不能解決此異常,則使用 SQLStatesqlException來處理
附: SQLStatesqlException處理步驟 sqlstate要求遵循XOPEN SQLstate協議或者SQL 99協議,因此不同資料庫所返回的sqlstate都是一樣的 1)為每種spring異常類建立一個hashset,通過static方法向其中放入對應的sqlstate
2)取得sqlstate,通過ifelse遍歷spring的異常,查詢與sqlstate對應的spring異常