#java #mysql #sql #null #where-clause
#java #mysql #sql #нулевой #where-предложение
Вопрос:
Я использую java для изменения таблицы. после выполнения этого кода
tab=b[i];
myStatement.executeUpdate("UPDATE hetero.temporary SET CatTable = ' " tab " ' WHERE CatTable IS NULL");
моя таблица изменена
----------------------------------------------
| '1', 'Achilles Tendon', ' Bodyparts ', '0' |
| '2', 'Adenoids', ' Bodyparts ', '0' |
| '3', 'Adrenaline', ' Bodyparts ', '0' |
| '4', 'Alimentary Canal', ' Bodyparts ', '0' |
----------------------------------------------
но используя
SELECT *
FROM hetero.temporary
Where Cattable LIKE 'Bodyparts '
ВОЗВРАТ
строка, в которой все значения равны null
если это поможет, я использую MySQL Workbench и intellij
Комментарии:
1. Попробуйте
SELECT * FROM hetero.temporary WHERE Cattable IS 'Bodyparts '
2. @Spectric, я ожидал синтаксической ошибки. Используйте
=
вместо этого.
Ответ №1:
Обратите внимание на введенное вами значение
' Bodyparts '
В нем есть пробел перед текстом и после него. Когда вы искали, вы искали
LIKE 'Bodyparts '
Обратите внимание на отсутствие начального пробела. Кроме того, поскольку вы не включили никаких подстановочных знаков, оператор эквивалентен
= 'Bodyparts '
так что, конечно, ничего не совпадает. Это сработало бы, если бы вы написали
LIKE '%Bodyparts%'
но не совсем ясно, чего ты хочешь. Решите, действительно ли вам нужны начальные и конечные пробелы.
Кроме того, обратите внимание, что построение инструкции SQL таким образом, как вы это делаете, открыто для атак SQL-инъекций. Вы должны использовать заполнители, как в
"UPDATE hetero.temporary SET CatTable = ? WHERE CatTable IS NULL"
А затем укажите значение во время выполнения, используя подготовленный оператор.
Комментарии:
1.
LIKE
принимает во внимание конечные пробелы, но=
не делает этого.2. Большое вам спасибо. Я застрял на этом некоторое время