Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从Java中的StoredProc获取结果集_Java_Sql Server_Stored Procedures_Jdbc - Fatal编程技术网

无法从Java中的StoredProc获取结果集

无法从Java中的StoredProc获取结果集,java,sql-server,stored-procedures,jdbc,Java,Sql Server,Stored Procedures,Jdbc,我们正在尝试用Java执行存储过程,如下所示 CREATE PROCEDURE [dbo].[MyProc] ( @input1 varchar(20), @input2 varchar(20), @responsecode varchar(10) output ) AS //Implementation SELECT @a,@b,@c,@d; SELECT @responsecode; callableStatement = conn.prepar

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

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

//Implementation

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

SELECT @responsecode;
callableStatement = conn.prepareCall("{call MyProc("2","2"))}");
callableStatement.registerOutParameter(3, Types.VARCHAR);           
callableStatement.registerOutParameter(4,Types.JAVA_OBJECT);
Java代码如下所示:

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

//Implementation

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

SELECT @responsecode;
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 Management Studio中执行此存储过程时,我可以看到两种类型的响应,第一种是resultset,另一种是ResponseCode,如下所示

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

//Implementation

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

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

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

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

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

GO

declare @param int

exec testsp @param output


select @param
因此,删除
选择@responsecode,以及可调用语句中的第四个注册参数


要获取数据,请通过执行executeQuery()对
executeQuery()返回的结果集进行迭代,我们将获得结果集,但接下来如何使用
callableStatement.getString(3)