在mysql中,我使用了这个SQL,运行得很好,现在我想使用日期作为参数,所以我使用了NamedParameterJdbcTemplate。
select * from student where CREATE_TIME>=DATE_SUB(curdate(),INTERVAL 24 HOUR)
现在我想使用日期作为参数,所以我使用了 "CURRENT_DATE"。NamedParameterJdbcTemplate
如果我传入'2020-05-30'这样的日期,它也运行得很好,但是当我传入'CURRENT_DATE'或'curdate()'时,它不能搜索到任何结果。
NamedParameterJdbcTemplate nameJdbc = new NamedParameterJdbcTemplate(jdbcTemplate);
Map<String,Object> paramMap = new HashMap<String, Object>();
//dateStr when '2020-05-30' is ok,'CURRENT_DATE' is not ok;
paramMap.put("dateStr",dateStr);
String sql = "SELECT *"
+ " FROM student where CREATE_TIME>=DATE_SUB(:dateStr,INTERVAL 24 HOUR)" ;
return nameJdbc.query(sql,paramMap,
new BeanPropertyRowMapper<>(Student.class));
它不工作,因为 CURRENT_DATE
,或一个等价的函数调用作为一个字符串参数被插入,而不是一个关键字。
你可以做的一件事是手动替换掉下面的 :dateStr
在SQL字符串中用 CURRENT_DATE
如果参数为空,则将其值放入参数图中。
一个更好的选择是直接使用 LocalDate.now().toString()
来设置日期字符串,如果参数为空,总是在SQL语句中设置。