java - java可以处理由MS SQL Server RAISEERROR命令引起的异常吗?

标签 java sql-server-2008 exception raiserror

不幸的是,我被迫使用 java 在 MS SQL Server 中执行一些存储过程。当发生异常时,我在 SP 中使用 RAISEERROR 命令。问题是java似乎无法捕获这些异常。 我的样本 SP:

ALTER PROCEDURE [dbo].[sp_test] 
    @fname nchar(30),
    @lname nchar(30)
AS
BEGIN

    BEGIN TRY
        IF (@fname) = 'something'
        BEGIN
            RAISERROR (N'First name is not valid!',16,1, N'number', 5);
            RETURN
        END
        Insert into [users] (
            [id]
          ,[fname]
          ,[lname]
          )
       Values
        (
            '1',
            @fname,
            @lname
        )
    END TRY
    BEGIN CATCH

    END CATCH   
END

我的Java代码:

try {
                // Establish the connection.
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                    con = DriverManager.getConnection(connectionUrl);
                    //------- Call a sp
                    String SPsql="EXEC sp_test ?,?"; //String SPsql="EXEC <sp_test> ?,?";
                    PreparedStatement ps=con.prepareStatement(SPsql);
                    ps.setEscapeProcessing(true);
                    ps.setQueryTimeout(20);
                    ps.setString(1, "something");
                    ps.setString(2, "12346");
                    //ps.setString(parameterIndex, x)
                   ps.execute();

                    }
            }
        catch (SQLException e) {
            e.printStackTrace();
        }catch (Exception e) {
            e.printStackTrace();
        }

SP正常执行,但java中没有捕获异常!

那么,java可以处理这类异常吗?我在这里做错了什么吗?

最佳答案

由于nchar(固定长度字符串),语句RAISERROR ..未执行。将其更改为 nvarchar

ALTER PROCEDURE [dbo].[sp_test] 
    @fname nvarchar(30),
    @lname nvarchar(30)
AS

关于java - java可以处理由MS SQL Server RAISEERROR命令引起的异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153823/

相关文章:

java - 设置 HEAPPPROFILE 后 jetty 立即退出

SQL 服务器 : return distinct number of periods

sql - 是否可以在 sql server 2005 中恢复 Sql Server 2008 备份

sql-server-2008 - SQL 使用变量设置 IDENTITY 字段

java - Java 语言在哪里定义 Throwable 是否被检查?

java - weblogic中的类转换异常

java - 如何从 Android 上的 ListView 中删除项目

注入(inject)到我的 Controller 类的 JavaFx @FXML Pagination 无法修改

java - JSF 不更新变量

java - 为什么我收到此错误 "Exception in thread "main"java.lang.ArrayIndexOutOfBoundsException : 1"