SQL Server 2008データベースにストアドプロシージャがあり、sqljdbc4接続を使用するJavaアプリケーションを開発しています。プロシージャの呼び出しも含めてすべて正常に動作しますが、1つだけあります。場合によっては、javaは、プロシージャによってスローされ、selectやupdate(delete insert)などの呼び出しがあるときに指定された発生した例外をキャッチしません。
ここに例があります
AS
BEGIN
DECLARE @c INT
SELECT @c= COUNT(nomUtilisateur)
FROM Utilisateur2
PRINT @c
RAISERROR(N'error message personalise',18,1)
END
この場合、Javaは例外をキャッチします
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パラメータを使用してこの戦略を残すことを好むのかということです。私は何も見つけずにこの問題をグーグルで検索しました。
個人的には、発生したエラーを使用したい