我有我的SQL Server 2008數據庫中的存儲過程,我devloping使用sqljdbc4連接的Java應用程序。一切工作正常,甚至過程調用,但有一件事 - 在某些情況下,Java沒有捕獲由程序引發的異常throwen和指定時有像選擇或更新(刪除插入)的呼叫java是不是捕捉MS SQL存儲過程引發錯誤
這裏是一個例子
AS
BEGIN
DECLARE @c INT
SELECT @c= COUNT(nomUtilisateur)
FROM Utilisateur2
PRINT @c
RAISERROR(N'error message personalise',18,1)
END
在這種情況下
java的catche異常
try{
CallableStatement cll=con.prepareCall("EXEC f3 ");
cll.execute();
System.out.println("fin EXEC f3 ? ");}
catch (SQLException e) {
System.out.println("sqlerror state: "+e.getSQLState() +" |error code: "
+ e.getErrorCode()+" |message: "+e.getMessage());
e.printStackTrace();
}
但是當我使用一個選擇這樣
ALTER PROCEDURE [dbo].[f3]
AS
BEGIN
declare @c INT
SELECT @c= COUNT(nomUtilisateur)
FROM Utilisateur2
select * from Utilisateur2
PRINT @c
RAISERROR(N'error message personalise',18,1)
END
或更新,java繼續執行,但沒有捕捉到異常。它就像它不等待程序的結束。
所以我的問題是,我是否使用存儲過程不正確,或者它是一個錯誤在jdbc驅動程序或它傾向於使用out參數並離開此策略;我谷歌搜索這個問題沒有找到任何東西。
就個人而言,我想使用超募錯誤
這條線是什麼意思:'**選擇*來自Utilisateur2 **'應該表示?這是無效的SQL語法AFAIK,我無法讓這個過程在我的任何SQL Server中編譯。 – RBarryYoung
這純粹是一種猜測,但java是否解釋了存儲過程的返回值?如果你在raiserror後面加上「return 1」會怎麼樣? –