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就不会被没有结果的额外行数所迷惑。