#java #sql
#java #sql
Вопрос:
У меня есть приведенный ниже sql
SELECT * FROM TABLE WHERE COLUMN LIKE CONCAT('%','CMP1','%') OR COLUMN LIKE
CONCAT('%','CMP2','%')
Я заменяю это программно
@Query(value = "SELECT * FROM TABLE WHERE ?1", nativeQuery = true)
List<Items> getAllItems(String param);
Мне пришлось добавить эти условия ИЛИ на основе пользовательских вводов, поэтому условия меняются, поэтому я использовал его как комбинированные операторы OR.
Как мне устранить эту ошибку?
Заранее спасибо
Ответ №1:
Ну, допустим, я вызываю getAllItems("Hello")
. Это означает, что в конечном итоге вы пытаетесь запустить SQL: «ВЫБЕРИТЕ * ИЗ ТАБЛИЦЫ, ГДЕ ‘Hello'», что является недопустимым SQL по точной указанной причине: ‘Hello’ не является логическим значением. Вы не можете поместить SQLese в эту строку (вы не можете вызвать getAllItems("column like CONCAT('%', 'CMP1', '%')")
— смысл этих запросов в том, что SQL жестко кодируется, а динамические данные (параметр string) экранируются.
Вам нужно было бы найти способ записать это как один оператор SQL или не использовать @Query
.