在 Select 查询中将日期传递给 NamedParameterJdbcTemplate 到 oracle

Passing Date to NamedParameterJdbcTemplate in Select query to oracle

我有如下查询,当 SQL 开发人员

运行 时返回预期记录
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 class 中的 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);

请指教

我想您已经找到了答案,但如果其他人需要它,这就是我找到的答案:

java.sql.Date 没有时间,只有日期字段。使用 java.sql.Timestampjava.util.DateNamedParameterJdbcTemplate.

两者似乎都对我有用

当您的输入 (lastSuccessfulReplicationTimeStamp1/lastSuccessfulReplicationTimeStamp2) 是一个字符串而不是 Date/TimeStamp 时(这正是我在 this [中寻找并找到的),上述解决方案可能会有一点变化 link -> 可能对某人有帮助):

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

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