1. 程式人生 > >java捕獲不到存儲過程裏面手拋的錯誤

java捕獲不到存儲過程裏面手拋的錯誤

技術分享 方法 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捕獲不到存儲過程裏面手拋的錯誤