我们正在尝试在 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,如下所示,
最佳答案
您将结果集与输出参数混淆了。您帖子中的存储过程只有一个输出参数,@responsecode
。
在过程中设置输出参数后,不需要选择输出参数:
create procedure testsp (@param int output)
as
set @param = 1
GO
declare @param int
exec testsp @param output
select @param
因此,删除SELECT @responsecode;
,以及可调用语句中的第四个注册参数。
要获取数据,请迭代 executeQuery()
返回的结果集。
关于java - 无法从 Java 中的 StoredProc 获取结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15926534/