java捕獲不到存儲過程裏面手拋的錯誤
阿新 • • 發佈:2018-09-06
技術分享 方法 creat alt proc 沒有 insert 如果 info
采用spring的JDBCTemplate來操作增刪查改,Basedao執行存儲過程的方法如下:
此方法要麽返回一個true,要麽拋出異常;
現象:
當項目發布於tomcat中時,同樣的代碼,同樣的過程,之前測試這個方法的時候,可以捕獲過程中手動拋出的錯誤,過了段時間今天再測試時,發現捕獲不到這個過程中手動拋出的錯誤了,而且此方法直接返回true!坑爹
查資料調試:
1:當前過程中沒有SET NOCOUNT ON;
2:在過程裏面手動拋錯誤RAISERROR之前,如果有insert語句,tomcat可能就捕獲不到這個手拋錯誤了,但是在不加SET NOCOUNT ON的情況下,把RAISERROR放到insert前面的話,可以捕獲。
解決:
在CREATE PROCEDURE ….. AS 下面開一行,寫上:
SET NOCOUNT ON
結論:
不加set nocount on的時候,過程在websphere項目中是沒問題的,但是在tomcat中可能會出問題,tomcat不像websphere一樣有很多容錯機制;
為什麽一樣的代碼,過程,以前可以捕獲,現在無法捕獲?因為這段時間數據庫重新恢復過,而采用的備份是現場生產環境前段時間的數據庫備份,猜測應該和數據庫環境有關,具體未知,總之,直接加上 SET NOCOUNT ON 到過程裏,在tomcat的jdbc中可以正常捕獲了
java捕獲不到存儲過程裏面手拋的錯誤