gpt4 book ai didi

java - SQL Server 2012 存储过程不在 JDBC 中返回任何结果

转载 作者:行者123 更新时间:2023-11-30 08:17:10 25 4
gpt4 key购买 nike

我在 SQL Server 2012 中有一个存储过程,它有一些参数,包括表类型参数,因为 SQL Server 2012 不支持表类型参数,我通过为此表类型参数设置默认值并具有只有 varchar 作为新过程的参数

DECLARE @pTempTable TABLE(

region varchar(max),
country varchar(max),
username varchar(max),
firstname varchar(max),
lastname varchar(max),
accessform varchar(max),
accessmodule varchar(max),
adate varchar(max),
atime varchar(max)
)

BEGIN

DECLARE @pTestFromDate DATETIME = '2008/01/01', @pTestToDate DATETIME = '2014/12/31'

DECLARE @pCountryIds GuidsTableType
INSERT @pCountryIds VALUES(NULL)

DECLARE @pRegionIds GuidsTableType
INSERT @pRegionIds VALUES(NULL)

DECLARE @pUserId UNIQUEIDENTIFIER = NULL
DECLARE @pModuleId UNIQUEIDENTIFIER = NULL

insert into @pTempTable exec usp_rpt_UserAudit
@RoleName = @pRoleName
,@pCountryIds=@pCountryIds
,@pRegionIds=@pRegionIds
,@pUserId=@pUserId
,@pModuleId=@pModuleId
,@pFromDate=@pTestFromDate
,@pToDate=@pTestToDate
SELECT * from @pTempTable


END

GO

我已经编写了一个 java 代码来执行这个存储过程,我能够建立连接,但是 execute() 方法总是返回 false。 java代码如下

    String finalSql = "{ call usp_rpt_sprocexecution(?) } ";
CallableStatement cs = connection.prepareCall(finalSql);
cs.setString(1, "Super Administrator");
System.out.println(cs.execute());
int c=0;

while(!((cs.getMoreResults() == false) && (cs.getUpdateCount() <= 1))){
System.out.println(c++);
ResultSet rs = cs.getResultSet();
System.out.println(rs.getString(1));
}

当我在 Management Studio 中执行相同的存储过程时,它会返回正确的结果表。

最佳答案

该过程返回类似 1 row(s) affected 的消息,该消息在 java 中被视为存储过程输出,因此平息了原始结果。

简单的技巧是在存储过程的开头添加 SET NOCOUNT ON,这样它就不会返回此类消息,从而返回实际输出。

关于java - SQL Server 2012 存储过程不在 JDBC 中返回任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28025070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com