Странное поведение при использовании ключевого слова HSQLDB

#java #hsqldb

#java #hsqldb

Вопрос:

У меня странный результат при создании новой таблицы в HSQLDB. Из документации HSQLDB «user» является ключевым словом, обычно мы не можем использовать это значение для имени таблицы или имени столбца, если оно не заключено в двойные кавычки.

Однако я могу создать таблицу базы данных с именем «USER» и таблицу базы данных DATA_RESULT с одним именем столбца «user», без двойного кавычек ключевого слова.

Проблема возникает при чтении данных из базы данных. Например, когда я выполняю: "select * from DATA_RESULT" и считываю значение «user» из результирующего набора, это работает.

Если я выполняю "select user from DATA_RESULT" или "SELECT * from DATA_RESULT where user = 1" , возникает ошибка. Оператор sql выполняется некорректно, ResultSet.next() всегда возвращает false .

Кроме того, в списках ключевых слов для HSQLDB говорится HyperSQL has two modes of operation, which are selected with the SET DATABASE SQL NAMES { TRUE | FALSE } to allow or disallow the keywords as identifiers. The default mode is FALSE and allows the use of most keywords as identifiers , что в нем не указано, можно ли использовать «user» в качестве идентификатора.

Я использую HSQLDB 2.0.0.

Это довольно запутанно. Кто-нибудь знает, что здесь происходит?

Заранее спасибо! Любое предложение было бы полезно.

Ответ №1:

USER — это функция для получения имени текущего пользователя. Например:

 CALL USER
  

Вы, конечно, можете использовать USER в качестве имени таблицы или имени столбца.

В инструкции SELECT используйте двойные кавычки вокруг имени.

 CREATE TABLE DATA_RESULT ("USER" INT, DATA VARCHAR(100))
SELECT * FROM DATA_RESULT WHERE "USER" = 1
  

При использовании двойных кавычек регистры должны совпадать.

Примечание Руководство на веб-сайте регулярно обновляется и в настоящее время соответствует последней версии 2.2.5.