Отбросьте все ограничения в Дерби через JDBC - PullRequest
5 голосов
/ 09 сентября 2010

Как мне удалить все ограничения в базе данных Derby через JDBC?

Ответы [ 2 ]

4 голосов
/ 09 сентября 2010

Вы можете запросить системные таблицы SYS.SYSCONSTRAINTS, SYS.SYSTABLES и SYS.SYSSCHEMAS, чтобы получить все имена ограничений и связанные таблицы для данной схемы.

Сначала несколько слов об этих таблицах (из Re: Системные таблицы в Derby ):

SYSTABLES содержит по одной строке для каждой таблицы в базе данных.Его первичный ключ - TABLEID, который содержит сгенерированные системой значения.SCHEMAID - это столбец внешнего ключа, который ссылается на SYSSCHEMAS.

SYSSCHEMAS имеет одну строку для каждой схемы в базе данных.Его первичный ключ - SCHEMAID.

...

SYSCONSTRAINTS имеет одну строку для каждого ограничения в базе данных (первичные, уникальные, внешние и проверочные ограничения).Его первичный ключ - CONSTRAINTID, который является сгенерированным системой значением.Столбец TABLEID является внешним ключом, ссылающимся на SYSTABLES.TABLEID.Столбец SCHEMAID является внешним ключом, относящимся к SYSSCHEMAS.SCHEMAID.

Таким образом, вы можете использовать следующий запрос:

SELECT 
    C.CONSTRAINTNAME,
    T.TABLENAME 
FROM 
    SYS.SYSCONSTRAINTS C, 
    SYS.SYSSCHEMAS S,
    SYS.SYSTABLES T 
WHERE 
    C.SCHEMAID = S.SCHEMAID 
AND 
    C.TABLEID = T.TABLEID
AND 
    S.SCHEMANAME = 'MYSCHEMA';

А затем выполнить цикл и построить соответствующий ALTER TABLE DROP CONSTRAINTоператор.

Ссылки

0 голосов
/ 10 сентября 2010

Я не совсем уверен, что понимаю, почему было бы полезно отбросить все ограничения в вашей базе данных программно. Тем не менее, для примера кода, который использует API DatabaseMetaData для поиска различных ограничений и других зависимых объектов (представлений и т. Д.) Для конкретной схемы в базе данных Derby, вы можете взглянуть на * 1003 Метод * dropSchema () в утилите JDBC.java проводки Derby: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/JDBC.java?view=co

...