使用Java JDBC调用包含选项参数的SqlServer存储过程

使用Java JDBC调用包含选项参数的SqlServer存储过程,java,sql-server-2008,stored-procedures,jdbc,Java,Sql Server 2008,Stored Procedures,Jdbc,我目前在使用JDBC调用SQLServer2008存储过程时遇到问题 问题似乎围绕着可选参数以及存储过程中参数的顺序。存储的过程签名如下(名称/默认值已更改): 我尝试使用的Java代码是 CallableStatement proc = connection.prepareCall("{call ProcName(?,?)}"); proc.setString("REQPARAM1", value); proc.registerOutParameter("OUTPARAM", java.sql

我目前在使用JDBC调用SQLServer2008存储过程时遇到问题

问题似乎围绕着可选参数以及存储过程中参数的顺序。存储的过程签名如下(名称/默认值已更改):

我尝试使用的Java代码是

CallableStatement proc = connection.prepareCall("{call ProcName(?,?)}");
proc.setString("REQPARAM1", value);
proc.registerOutParameter("OUTPARAM", java.sql.Types.INTEGER);
proc.execute();
int result = proc.getInt("OUTPARAM");
但这不起作用,而且会带来

索引8超出范围

我似乎能够让它运行的唯一方法是声明所有可选参数,这将使它们的对象不再是可选的。或者直接将out参数移到可选参数之前,这会在数据库中造成不一致性(基本代码是.Net,这是完全可能的)


所以,我想我的问题是,是否有可能以这种方式使用可选参数

我唯一的建议是不要使用Microsoft SQL Server JDBC驱动程序。这很可怕,会给您带来性能问题和其他问题。试着看看你的问题是否消失了

CallableStatement proc = connection.prepareCall("{call ProcName(?,?)}");
proc.setString("REQPARAM1", value);
proc.registerOutParameter("OUTPARAM", java.sql.Types.INTEGER);
proc.execute();
int result = proc.getInt("OUTPARAM");