我有一个如下查询,它从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);
请告知。
答案 0 :(得分:2)
我猜你已经找到了答案,但是如果有其他人需要的话,我在这里找到了:
java.sql.Date
没有时间,只有日期字段。使用java.sql.Timestamp
或java.util.Date
。这两个似乎都适用于NamedParameterJdbcTemplate
。
答案 1 :(得分:0)
当您的输入(lastSuccessfulReplicationTimeStamp1 / lastSuccessfulReplicationTimeStamp2)是String而不是Date / TimeStamp(这是我在this链接中寻找并找到的)时,可以对上述解决方案进行一些更改->可以帮助某人):
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("lastSuccessfulReplicationTimeStamp1", lastSuccessfulReplicationTimeStamp1, Types.TIMESTAMP);
parameters.addValue("lastSuccessfulReplicationTimeStamp2", lastSuccessfulReplicationTimeStamp2, Types.TIMESTAMP);
list = namedParameterJdbcTemplateOracle.query(sql, parameters, myTabRowMapper);