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

时间:2020-05-30 05:44:56

标签: java mysql jdbctemplate

在mysql中,我使用此sql,它运行良好。

select * from student where CREATE_TIME>=DATE_SUB(curdate(),INTERVAL 24 HOUR)

现在我想使用日期作为参数,所以我使用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));

1 个答案:

答案 0 :(得分:1)

这是行不通的,因为CURRENT_DATE或等效的函数调用是作为字符串参数而不是关键字插入的。

您可以做的一件事是,如果参数为空,则用:dateStr手动替换SQL字符串中的CURRENT_DATE,否则将其值放在参数映射中。

如果参数为空,则更好的选择是仅使用LocalDate.now().toString()设置日期字符串,并始终在SQL语句中进行设置。

相关问题