JavaDB - СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ - как?

Я пытаюсь создать таблицу с помощью JavaDB (Derby), но если я попытаюсь добавить ЕСЛИ НЕ СУЩЕСТВУЕТ:

CREATE TABLE IF NOT EXISTS etc (ID BIGINT PRIMARY KEY, title VARCHAR(150))

Я получаю сообщение об ошибке:

java.sql.SQLSyntaxErrorException: Синтаксическая ошибка: обнаружено «НЕ» в строке 1, столбце 17.

Насколько я помню, он работает на MySQL. Каков синтаксис/самый простой способ проверить, существует ли таблица?

ИЗМЕНИТЬ:

Наконец я нашел решение:

DatabaseMetaData dbmd = conn.getMetaData();
ResultSet rs = dbmd.getTables(null, "APP", "ETC", null);
if (rs.next()) {
    System.out.println("Table " +  rs.getString(3) + " exists");
}

Я заметил, что имя таблицы чувствительно к регистру, если оно создается с использованием кавычек «и т. д.», а если нет - имя должно быть в верхнем регистре. Согласно документации API: «должно совпадать с именем таблицы, так как оно хранится в базе данных».


person Ernestas Gruodis    schedule 08.08.2013    source источник


Ответы (1)


if not exists (select * from sysobjects where name='etc' and xtype='U')
create table etc(
   ID BIGINT PRIMARY KEY, title VARCHAR(150)
);

Он создаст таблицу с именем etc, если она не существует.

Подробнее об этом см. ниже здесь.

Удачи

person ClaireG    schedule 08.08.2013
comment
Спасибо, но в моей базе нет такой таблицы sysobjects. Список таблиц: SYSCONGLOMERATES SYSTABLES SYSCOLUMNS SYSSCHEMAS SYSCONSTRAINTS SYSKEYS SYSDEPENDS SYSALIASES SYSVIEWS SYSCHECKS SYSFOREIGNKEYS SYSSTATEMENTS SYSFILES SYSTRIGGERS SYSSTATISTICS SYSDUMMY1 SYSTABLEPERMS SYSCOLPERMS SYSROUTINEPERMS SYSROLES Все еще получаю ошибку .. - person Ernestas Gruodis; 08.08.2013
comment
Попробуйте эту ссылку; есть более полезные вещи, которыми вы можете попробовать заменить первый оператор select. stackoverflow.com/questions/205736 / - person ClaireG; 08.08.2013
comment
Ни один из вышеперечисленных методов не работал у меня. Возможно, для других баз данных, но не для javaDB/Derby. - person Ernestas Gruodis; 08.08.2013