Java com.microsoft.sqlserver.jdbc.SQLServerException:未为参数设置该值

Java com.microsoft.sqlserver.jdbc.SQLServerException:未为参数设置该值,java,sql-server,stored-procedures,jdbc,mssql-jdbc,Java,Sql Server,Stored Procedures,Jdbc,Mssql Jdbc,我有时只会遇到这种例外,比如每100个电话中就有一个例外。我在寻找解决办法,但没有找到答案。存储过程接受一个输入。我使用的驱动程序是sqljdbc4版本4.0 CREATE PROCEDURE [dbo].[PROC_CATEGORY_LIST] @USERID INT 我已经设置了如下参数 "EXEC PROC_CATEGORY_LIST ?" callableStatement.setInt(1, userId); resultSet = callableState

我有时只会遇到这种例外,比如每100个电话中就有一个例外。我在寻找解决办法,但没有找到答案。存储过程接受一个输入。我使用的驱动程序是sqljdbc4版本4.0

CREATE PROCEDURE [dbo].[PROC_CATEGORY_LIST] @USERID INT
我已经设置了如下参数

    "EXEC PROC_CATEGORY_LIST ?"
    callableStatement.setInt(1, userId);
    resultSet = callableStatement.executeQuery();
我得到以下例外

The value is not set for the parameter number 2.
com.microsoft.sqlserver.jdbc.SQLServerException: The value is not set for the parameter number 2.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildParamTypeDefinitions(SQLServerPreparedStatement.java:260)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildPreparedStrings(SQLServerPreparedStatement.java:219)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doPrepExec(SQLServerPreparedStatement.java:612)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:400)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:285)
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport$StatementProxy.invoke(AbstractQueryReport.java:233)
    at com.sun.proxy.$Proxy2.executeQuery(Unknown Source)

有人遇到过这样的问题吗。如果是,可能的解决方案是什么。

PROC\u A\u LIST!=PROC_CATEGORY_LIST您正在显示的PROC签名是
PROC_A_LIST
,而您正在调用
PROC_CATEGORY_LIST
-我猜后者有>1个参数?很抱歉这个错误。它的PROC_CATEGORY_LIST不是PROC_A_LIST。出于故障排除的目的,您可以删除userId参数并查看发生了什么情况吗?我删除了userId并获得了此异常com.microsoft.sqlserver.jdbc.SQLServerException:参数编号1的值未设置。