Проблемы с исходным столом и именами полей в Derby и HSQLDB

StackOverflow https://stackoverflow.com/questions/3121128

Вопрос

У меня проблема с моим 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'

Если имя столбца / столбца находится в двойных цитатах, корпус сохраняется как есть.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top