为什么在JAVA中使用NamedParameterJdbcTemplate时,'CURRENT_DATE'不能作为参数?

问题描述 投票:0回答:1

在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));
java mysql jdbctemplate
1个回答
1
投票

它不工作,因为 CURRENT_DATE,或一个等价的函数调用作为一个字符串参数被插入,而不是一个关键字。

你可以做的一件事是手动替换掉下面的 :dateStr 在SQL字符串中用 CURRENT_DATE 如果参数为空,则将其值放入参数图中。

一个更好的选择是直接使用 LocalDate.now().toString() 来设置日期字符串,如果参数为空,总是在SQL语句中设置。

© www.soinside.com 2019 - 2024. All rights reserved.