Ошибка SQL выражение некулевого типа, указанное в контексте, где ожидается условие, рядом с ‘И’

#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 .