Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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 SQL Server 2012存储过程在JDBC中不返回任何结果_Java_Sql Server_Stored Procedures_Jdbc_Sql Server 2012 - Fatal编程技术网

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

Java 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

我在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));
    }
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,现在效果很好。