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