Шаблон JDBC выдает ошибку при запросе с использованием «like»

#java #mysql #sql #jdbctemplate

#java #mysql #sql #jdbctemplate

Вопрос:

Я не понимаю, как использовать %?% в приведенном ниже запросе. Это выдает мне ошибку:

PreparedStatementCallback; исключение SQLException без рубрики для SQL [выберите * из имен, где имя похоже на ‘%?%’]

Проблема:

 String sql = "select * from names where name like ?";
List<NamesModel> names = jdbcTemplate.query(sql, new Object[]{searchName}, new NamesRowMapper());
  

Комментарии:

1. Всегда добавляйте полную трассировку стека

2. Также, пожалуйста, покажите ввод.

3. Я передаю строковое значение в качестве входных данных. например: Строка username = «XYZ»; Список<Имена> имена = namesDao.getAllmatchingNames (имя пользователя);

Ответ №1:

Ваше исключение сообщает вам, что вы не можете привязать значение в кавычках. Ниже не будет работать:

 String sql = "select * from names where name like '%?%'";
List<NamesModel> names = jdbcTemplate.query(sql, 
        new Object[]{ searchName }, new NamesRowMapper());
  

Правильный способ — добавить % вокруг searchName значения параметра:

 String sql = "select * from names where name like ?";
List<NamesModel> names = jdbcTemplate.query(sql, 
        new Object[]{ "%"   searchName   "%"}, new NamesRowMapper());