为什么在JAVA中使用NamedParameterJdbcTemplate时'CURRENT_DATE'不能作为参数?
Why can 'CURRENT_DATE' not as a parameter when using NamedParameterJdbcTemplate in JAVA?
在mysql中,我使用这个sql并且运行良好。
select * from student where CREATE_TIME>=DATE_SUB(curdate(),INTERVAL 24 HOUR)
现在我想使用日期作为参数,所以我使用NamedParameterJdbcTemplate
,如果我传递像'2020-05-30'这样的日期,它也会在我传递时运行well.But 'CURRENT_DATE' 或 'curdate()',它无法搜索任何 result.How 来更改我的代码?
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
或等效函数调用作为字符串参数而不是关键字插入。
您可以做的一件事是,如果参数为空,则将 SQL 字符串中的 :dateStr
手动替换为 CURRENT_DATE
,否则将其值放入参数映射中。
更好的选择是只使用 LocalDate.now().toString()
设置日期字符串,如果参数为空,并且始终在 SQL 语句中设置它。
在mysql中,我使用这个sql并且运行良好。
select * from student where CREATE_TIME>=DATE_SUB(curdate(),INTERVAL 24 HOUR)
现在我想使用日期作为参数,所以我使用NamedParameterJdbcTemplate
,如果我传递像'2020-05-30'这样的日期,它也会在我传递时运行well.But 'CURRENT_DATE' 或 'curdate()',它无法搜索任何 result.How 来更改我的代码?
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
或等效函数调用作为字符串参数而不是关键字插入。
您可以做的一件事是,如果参数为空,则将 SQL 字符串中的 :dateStr
手动替换为 CURRENT_DATE
,否则将其值放入参数映射中。
更好的选择是只使用 LocalDate.now().toString()
设置日期字符串,如果参数为空,并且始终在 SQL 语句中设置它。