Грамматика запросов к базе данных H2

#sql #h2

#sql #h2

Вопрос:

Я выполняю следующий запрос

 SELECT * 
FROM USER_MODEL 
WHERE "name"  = "Administrator"
  

Однако я получаю сообщение об ошибке, не уверен, почему значение также считается именем столбца.

Столбец «Администратор» не найден; Инструкция SQL:

Когда я попытался использовать одинарные кавычки.

 SELECT * 
FROM USER_MODEL 
WHERE "name"  = 'Administrator' 
  

Затем H2 снова жалуется

Литералы такого рода не допускаются; Оператор SQL:

Если имя не заключено в двойные кавычки. H2 преобразует имя столбца в верхний регистр.

 SELECT * 
FROM USER_MODEL 
WHERE name  = "Administrator"
  

Столбец «ИМЯ» не найден; оператор SQL:

Нужна помощь в том, как работает запрос H2.

Ответ №1:

Вы должны использовать этот запрос

 SELECT * 
FROM USER_MODEL 
WHERE name = 'Administrator'
  

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

1. H2 не допускает одинарных кавычек. Во-вторых, если я даю имя, оно преобразует его в верхний регистр и выполняет поиск имени столбца. и выдает ошибку.

2. Вы уверены? Грамматика SQL ( h2database.com/html/grammar.html#expression ) предполагает, что так оно и есть.

3. да, я уверен .. 🙁

Ответ №2:

Итак, наконец-то получил решение, мне пришлось выполнить SET ALLOW_LITERALS ALL . чтобы разрешить одинарные кавычки в моем запросе.

По умолчанию h2 отключил это, чтобы предотвратить внедрение SQL.

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

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