java没有捕获ms sql存储过程引发错误

我在我的SQL Server 2008数据库中有一个存储过程,我正在开发一个使用sqljdbc4连接的
java应用程序.一切正常,甚至程序调用,但有一件事 – 在某些情况下,java不会捕获由程序引发的引发异常并在有调用时指定,如select或update(删除插入)

这是一个例子

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参数并保留此策略;我搜索了这个问题而没有找到任何东西.

就个人而言,我想使用引发的错误

最佳答案 尝试删除PRINT语句并在proc的代码中放入“SET NOCOUNT ON”,可能是驱动程序混淆了.

点赞