4

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パラメータを使用してこの戦略を残すことを好むのかということです。私は何も見つけずにこの問題をグーグルで検索しました。

個人的には、発生したエラーを使用したい

4

1 に答える 1

2

PRINTステートメントを削除して、procのコードに「SET NOCOUNT ON」を入れてみてください。ドライバーが混乱する可能性があります。

于 2012-10-21T16:18:40.767 に答える