java捕獲不到預存程序裡面手拋的錯誤

來源:互聯網
上載者:User

標籤:dao   錯誤   ring   info   現在   nbsp   測試   應該   容錯   

採用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一樣有很多容錯機制;

  為什麼一樣的代碼,過程,以前可以捕獲,現在無法捕獲?因為這段時間資料庫重新恢複過,而採用的備份是現場生產環境前段時間的Database Backup,猜測應該和資料庫環境有關,具體未知,總之,直接加上 SET NOCOUNT ON 到過程裡,在tomcat的jdbc中可以正常捕獲了

java捕獲不到預存程序裡面手拋的錯誤

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.