在 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.Timestamp
或 java.util.Date
。 NamedParameterJdbcTemplate
.
两者似乎都对我有用
当您的输入 (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);
我有如下查询,当 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.Timestamp
或 java.util.Date
。 NamedParameterJdbcTemplate
.
当您的输入 (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);