Итак, я пытаюсь сделать запрос (Java) к базе данных (h2) для функции поиска. Для поиска в Запросе должны быть найдены записи, в которых атрибуты частично совпадают.
Поиск может быть для каждой комбинации атрибутов, поэтому проверьте, действительны ли они.
public List<Horse> search(Horse mockHorse) {
LOGGER.trace("Search horses which match{}", mockHorse);
String query = "SELECT * FROM " + TABLE_NAME + " WHERE" +
"(UPPER(name) LIKE UPPER(%?%)) AND "+
"UPPER(description) LIKE UPPER(%?%)"+
" AND breed LIKE ? AND ranking=?";
// set value to wildcard to match every value
if (!mockHorse.getBreed().equals("")) {
mockHorse.setBreed("%");
}
(извините за тот формат, который не был принять это иначе)
Object[] obj = new Object[]{
mockHorse.getName(),
mockHorse.getDescription(),
mockHorse.getBreed(),
mockHorse.getRanking()
};
if (!(mockHorse.getBirthdate()==null)){
query+= " AND birthdate <=?";
obj = new Object[] {
mockHorse.getName(),
mockHorse.getDescription(),
mockHorse.getBreed(),
mockHorse.getRanking(),
mockHorse.getBirthdate().toString()
};
}
final String sql = query +';';
return jdbcTemplate.query(sql,obj, this::mapRow);
}
Однако, что бы я ни пытался исправить, я получаю только новые ошибки, в настоящее время я застрял с
Syntax error in SQL statement "SELECT * FROM HORSE WHERE(UPPER(NAME) LIKE UPPER(%[*]?%)) AND UPPER(DESCRIPTION) LIKE UPPER(%?%) AND BREED LIKE ? AND RANKING=? AND BIRTHDATE <=?;"; expected "), NOT, EXISTS, INTERSECTS, UNIQUE"; SQL
statement:
SELECT * FROM Horse WHERE(UPPER(name) LIKE UPPER(%?%)) AND UPPER(description) LIKE UPPER(%?%) AND breed LIKE ? AND ranking=? AND birthdate <=?; [42001-200]
Не могли бы вы дать мне подсказку о том, что я делаю не так. (Я попытался удалить 'из UPPER, а также переместить их в сторону от UPPER (' UPPER ') и обернуть его вокруг% (UPPER ('%?% ')).