Java SQL Server 2012存储过程在JDBC中不返回任何结果
我在SQL Server 2012中有一个存储过程,它有几个参数,包括表类型参数,因为SQL Server 2012不支持表类型参数。我编写了另一个存储过程,为此表类型参数设置了默认值,并且新过程的参数仅为varcharJava SQL Server 2012存储过程在JDBC中不返回任何结果,java,sql-server,stored-procedures,jdbc,sql-server-2012,Java,Sql Server,Stored Procedures,Jdbc,Sql Server 2012,我在SQL Server 2012中有一个存储过程,它有几个参数,包括表类型参数,因为SQL Server 2012不支持表类型参数。我编写了另一个存储过程,为此表类型参数设置了默认值,并且新过程的参数仅为varchar DECLARE @pTempTable TABLE( region varchar(max), country varchar(max), username varchar(max), firstname varchar(max), lastna
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));
}
String finalSql=“{call usp_rpt_sprocecution(?)}”;
CallableStatement cs=connection.prepareCall(finalSql);
cs.setString(1,“超级管理员”);
System.out.println(cs.execute());
int c=0;
而(!((cs.getMoreResults()==false)&&(cs.getUpdateCount()该过程返回消息,如受影响的1行,在java中被视为存储过程输出,因此会降低原始结果
简单的技巧是在存储过程的开头添加SET NOCOUNT ON,这样它就不会返回这样的消息,从而返回实际的输出。尝试将SET NOCOUNT ON
添加到过程的开头受影响的
正在被传回,可能会被解释为结果集。这将抑制这些消息。非常感谢@GarethD,现在效果很好。