spring 在选择查询中将日期传递给Oracle中的NamedParameterJdbcTemplate

x4shl7ld  于 2023-11-16  发布在  Spring
关注(0)|答案(3)|浏览(130)

我有一个如下所示的查询,当从SQL Developer运行该查询时,它将返回预期的记录

SELECT *
FROM MY_TABLE WHERE ( CRT_TS > TO_DATE('25-Aug-2016 15:08:18', 'DD-MON-YYYY HH24:MI:SS') 
or UPD_TS > TO_DATE('25-Aug-2016 15:08:18', 'DD-MON-YYYY HH24:MI:SS'));

字符串
我认为,当我们将java.util.Date对象作为日期参数传递时,我们不需要应用TO_DATE,但是下面的代码片段会默默地返回0条记录。
我在Java类中的SQL查询如下所示:

SELECT * 
FROM MY_TABLE WHERE ( CRT_TS > :lastSuccessfulReplicationTimeStamp1 
or UPD_TS > :lastSuccessfulReplicationTimeStamp2);


执行上述查询的代码如下所示,但下面的代码片段会无提示地返回0条记录:

parameters.put("lastSuccessfulReplicationTimeStamp1", new java.sql.Date(outputFileMetaData.getLastSuccessfulReplicationTimeStamp().getTime()));
    parameters.put("lastSuccessfulReplicationTimeStamp2", new java.sql.Date(outputFileMetaData.getLastSuccessfulReplicationTimeStamp().getTime()));
    list = namedParameterJdbcTemplateOracle.query(sql, parameters, myTabRowMapper);


还请指教。

y0u0uwnf

y0u0uwnf1#

我想你已经找到了答案,但如果有人需要它,这是我发现的:
java.sql.Date没有时间,只有日期字段。要么使用java.sql.Timestamp,要么使用java.util.Date。这两个似乎都适合我使用NamedParameterJdbcTemplate

i2loujxw

i2loujxw2#

上述解决方案的一个小变化可以是当你的输入(lastBullfulReplicationTimeStamp 1/lastBullfulReplicationTimeStamp 2)是一个字符串而不是日期/时间戳(这是我正在寻找的,并在this链接->找到它可能可以帮助别人):

MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("lastSuccessfulReplicationTimeStamp1", lastSuccessfulReplicationTimeStamp1, Types.TIMESTAMP);
parameters.addValue("lastSuccessfulReplicationTimeStamp2", lastSuccessfulReplicationTimeStamp2, Types.TIMESTAMP);

list = namedParameterJdbcTemplateOracle.query(sql, parameters, myTabRowMapper);

字符串

zzwlnbp8

zzwlnbp83#

JavaTec和S0m30n3提供的简洁答案
我想分享一个使用java.util.Date的替代方法,该方法已被格式化为以下日期和时间格式的String

Date date = new Date();
String formattedDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);

字符串
万一有人需要这个

相关问题