Вопрос

I have a stored procedure in my SQL Server 2008 database and I am devloping a java application that use a sqljdbc4 connection. Everything works fine, even procedure call, but there is one thing - in some case java does not catch raised exception throwen by the procedures and specified when there is call like a select or update (delete insert)

here is an exemple

AS
BEGIN
    DECLARE @c INT
    SELECT @c= COUNT(nomUtilisateur) 
        FROM Utilisateur2
    PRINT @c
    RAISERROR(N'error message personalise',18,1)
END

in this case java catche the exception

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();
} 

but when I use a select like this


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

or an update, java continues excution with out catching the exception. Its like it doesn't wait for the end of the procedure.

So my question is, am I using the stored procedure incorrectly or is it a bug in jdbc driver or it prefer to use an out parameter and leave this strategy; i Googled this probleme without finding anything.

Personally, I want to use the raised error

Это было полезно?

Решение

Try removing PRINT statement and put "SET NOCOUNT ON" in proc's code, it might be that driver gets confused.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top