Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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 将日期作为varchar传递给SQL Server中的存储过程_Java_Sql Server_Spring_Hibernate_Callable Statement - Fatal编程技术网

Java 将日期作为varchar传递给SQL Server中的存储过程

Java 将日期作为varchar传递给SQL Server中的存储过程,java,sql-server,spring,hibernate,callable-statement,Java,Sql Server,Spring,Hibernate,Callable Statement,我有一个存储过程,它接受如下参数: ALTER PROCEDURE [DataExtract].[USP_GET_ACTIVATIONS] ( @UNITID INT = NULL, @STARTDATE VARCHAR(30) = NULL, @ENDDATE VARCHAR(30) = NULL, @TEST BIT = 0 ) AS BEGIN ...... 当我从SQLServer控制台执行此操作时,它将返回我期望的数据 EXEC [DataExtract].[U

我有一个存储过程,它接受如下参数:

ALTER PROCEDURE [DataExtract].[USP_GET_ACTIVATIONS]
(
  @UNITID INT = NULL,
  @STARTDATE VARCHAR(30) = NULL,
  @ENDDATE VARCHAR(30) = NULL,
  @TEST BIT = 0
)
AS
BEGIN
......
当我从SQLServer控制台执行此操作时,它将返回我期望的数据

EXEC    [DataExtract].[USP_GET_ACTIVATIONS]
        @UNITID = 1,
        @STARTDATE = N'2020-06-29',
        @ENDDATE = N'2020-07-08',
        @TEST = 1
GO
我试图使用这个可调用语句调用这个过程

final SQLServerConnection connection = (SQLServerConnection) ds.getConnection();
SQLServerCallableStatement callableStatement = (SQLServerCallableStatement) connection.prepareCall("{call [DataExtract].[USP_GET_ACTIVATIONS](?, ?, ?, ?)}");
callableStatement.setInt(1, 1);
callableStatement.setString(2, "2020-06-29");
callableStatement.setString(3, "2020-07-08");
callableStatement.setBoolean(4, true);
final boolean execute = callableStatement.execute();
//execute is always false
语句总是将结果返回为
false
(而结果集
null
)。我猜我的约会方式有问题,但我不知道是什么


我如何着手解决这个问题?(更改SP不是一个选项,因为还有许多其他组件依赖于此)

您的存储过程是否只运行select(或先运行select),还是在运行select之前先运行update或insert语句?@allmhuran不,它只是一个select语句,稍后会有一些连接,我肯定不是java爱好者,但是我相信如果您的过程确实只返回一个结果集,那么您应该能够使用
executeQuery
。但即便如此,我还是建议使用调用
getMoreResults()
的额外代码行进行调试,以确保在结果集之前不会出现任何结果。是否可能需要使用单个刻度(例如,“2020-06-29”)传入日期值?在select语句之前的存储过程中是否有其他数据修改语句?您可能必须在
SET NOCOUNT ON
的情况下启动该过程,这样Java就不会被没有结果的额外行数所迷惑。