Почему CURRENT_DATE не может быть параметром при использовании NamedParameterJdbcTemplate в JAVA? - PullRequest
0 голосов
/ 30 мая 2020

В 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 Ответ

1 голос
/ 01 июня 2020

Это не работает, потому что CURRENT_DATE или эквивалентный вызов функции вставляется как строковый параметр, а не ключевое слово.

Единственное, что вы могли бы сделать, - это вручную заменить :dateStr в строке SQL с CURRENT_DATE, если параметр пуст, в противном случае поместите его значение в карту параметров.

Лучшим вариантом было бы просто использовать LocalDate.now().toString() для установки строки даты, если параметр пуст, всегда задавайте его в операторе SQL.

...