日常排雷 資料庫異常的處理

2021-09-11 08:27:09 字數 490 閱讀 8581

碰到乙個業務,給使用者充值修改餘額,並且插入記錄表.

在進行多執行緒測試的時候,因為記錄表是使用者名稱和時間做的唯一性約束,單位時間裡只能插入一條記錄,造成資料不統一,所以加了事務回滾.

專案基於springboot 做的,本以為直接@transactional就可以了,測試之後發現不行!

之後各種排雷,多次測試,找到了乙個正確的方法:

因為在repository類上面有@repository註解,預設自動處理資料庫異常,導致資料庫異常沒丟擲來,後來加上try catch.手動拋了runtimeexception,這樣就可以了!

還有乙個就是 一般的事務中  對於error 和runtimeexception 是不需要通過throw 和try catch進行捕獲的,不然會導致異常**獲,無法進行回滾,對於checked必須由throw丟擲或者try catch捕獲,

資料庫 異常處理

處理步驟 declare 宣告變數 begin 處理邏輯 exception 處理異常 when 異常1 then when 異常2 then when others then 處理其他異常 end 常見異常 zero divide 除零異常 value error 型別轉換異常 too many ...

Oracle資料庫 異常處理

oracle異常處理 在pl sql語句書寫時,需要處理的異常 不做異常處理時 declare v name emp.ename type v sal emp.sal type begin select ename,sal into v name,v sal from emp where empno...

Oracle資料庫的異常處理

一 說明 oracle資料庫底冊定義了很多異常,每個異常都有乙個唯一的編碼,這些異常之中,有一些是常見的,oracle給這些異常定義了名稱,可以直接使用,其他沒有名稱直郵編碼的不能直接使用。二 分類 1 預定義異常 既有編碼又有名稱的異常是預定義異常,此類異常可以直接使用 2 非預定義異常 有編碼但...