0

我们正在尝试在 Java 中执行存储过程,如下所示,

CREATE PROCEDURE [dbo].[MyProc] 
(
    @input1 varchar(20),
    @input2 varchar(20),
    @responsecode       varchar(10) output
)
AS

//Implementation

SELECT @a,@b,@c,@d;

SELECT @responsecode;

Java 代码如下所示,

callableStatement = conn.prepareCall("{call MyProc("2","2"))}");
callableStatement.registerOutParameter(3, Types.VARCHAR);           
callableStatement.registerOutParameter(4,Types.JAVA_OBJECT);

如您所见,我们试图从存储过程中获取两个输出参数,

我们能够在索引 3 处获得响应代码,但是 @a,@b,@c,@d 应该在索引 4 处作为结果集出现(可能是我错了)

你能否给我一些关于为这种存储过程获取结果集的提示。

当我在 Microsoft SQL Server Managment Studio 中执行这个存储过程时,我可以看到两种类型的响应,第一种是结果集,另一种是 ResponseCode,如下所示,

在此处输入图像描述

4

1 回答 1

2

您将结果集与输出参数混合在一起。您帖子中的存储过程只有一个输出参数,@responsecode.

在 proc 中设置输出参数后无需选择输出参数:

create procedure testsp (@param int output)
as
    set @param = 1

GO

declare @param int

exec testsp @param output


select @param

因此,删除SELECT @responsecode;, 以及可调用语句中的第 4 个注册参数。

要获取您的数据,请遍历返回的结果集executeQuery()

于 2013-04-10T13:11:33.500 回答