Проблемы с исходным столом и именами полей в Derby и HSQLDB
Вопрос
У меня проблема с моим Ormlite Package.. Отказ Когда я генерирую схему для таблицы, я думал, что будет хорошей практикой, чтобы избежать всех названий сущностей. Это защитит некоторое имя Java или имени поля от SQL зарезервированного слова:
CREATE TABLE "footable" ("stuff" VARCHAR(255))
Сейчас я добавляю «RAW» поддержку запроса, чтобы Ormlite может помочь пользователям выполнять свои собственные запросы. Тем не менее, я обнаружил, что с derby и hsqldb имена сущности не могут быть использованы без сбежав. Например, следующий запрос:
SELECT * FROM footable
генерирует следующие ошибки:
Derby: ERROR 42X05: Table/View 'FOOTABLE' does not exist.
Hsqldb: Table not found in statement [select * from footable]
Работает нормально, если таблица выбора также сбежит как "footable"
. Отказ Другие базы данных, поддерживаемые ORMLITE работают нормально с помощью или без сбежания: MySQL, Postgres, Microsoft SQL Server, H2 и SQLite.
Есть ли лучшие способы избежать зарезервированных слов в Derby и HSQLDB? Другие идеи о том, как сделать это портативным образом?
Спасибо.
Решение
Итак, слава Брайану за ведущую меня по пути, хотя его ответ не совсем правильно.
Оказывается, потому что я создаю базу данных как "footable"
Затем, как Bryan States, это будет создано дело чувствительно. Однако, когда я сделал выбор на footable
(без Цитаты) Дерби и HSQLDB продвигают его всеми заглавными буквами, поэтому я эффект делаю:
SELECT * FROM FOOTABLE
Речь идет не о том, чтобы быть нечувствительным к случаю без котировок (что бы сработало), но о продвижении названий сущности - все столицы, когда нет цитат, а затем сопоставления по делу. Я бы поспорил, что здесь была ошибка ...
В любом случае, я изменил свой Derby и HSQLDB, чтобы использовать все имена сущностей в Ormlite. И вещи работают. Уродливый IMO, но работает.
Другие советы
Вы просто должны убедиться, что дело совпадает.
Так что если это:
create table "Footable" ("Stuff" varchar (25))
Тогда должно быть:
insert into "Footable" ("Stuff") values 'hi mom'
Если имя столбца / столбца находится в двойных цитатах, корпус сохраняется как есть.
Если имя столбца / столбца не в двойных кавычках, то дерби обрабатывает его нечувствительным к случаю.