Удалить все таблицы в Derby DB
Вопрос
Как удалить все таблицы в схеме в базе данных Apache Derby с помощью JDBC?
Решение
Для реального кода, который делает это, проверьте CleanDatabaseTestSetup.java в разделе набора тестов Derby дистрибутива Derby.
Другие советы
Выражаем благодарность блогу :
Шаг 1:
Запустите оператор SQL, но не забудьте заменить имя схемы «APP» на имя вашей схемы в следующих 2 случаях:
SELECT
'ALTER TABLE '||S.SCHEMANAME||'.'||T.TABLENAME||' DROP CONSTRAINT '||C.CONSTRAINTNAME||';'
FROM
SYS.SYSCONSTRAINTS C,
SYS.SYSSCHEMAS S,
SYS.SYSTABLES T
WHERE
C.SCHEMAID = S.SCHEMAID
AND
C.TABLEID = T.TABLEID
AND
S.SCHEMANAME = 'APP'
UNION
SELECT 'DROP TABLE ' || schemaname ||'.' || tablename || ';'
FROM SYS.SYSTABLES
INNER JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID = SYS.SYSSCHEMAS.SCHEMAID
where schemaname='APP';
Шаг 2:
Результатом вышеописанного выполнения является набор операторов SQL, скопируйте их в редактор SQL, выполните их, затем ограничения и таблицы будут удалены.
Сделайте небольшой метод в Java, в котором вы выполняете
DROP TABLE [tablename]
tablename
передается параметром.
И еще один метод, в котором вы перебираете набор записей, сформированный запросом
SELECT tablename FROM SYSTABLES
вызов первого метода.
Я думаю, что большинство поставщиков баз данных не разрешают DROP TABLE * (или аналогичный).
Я думаю, что лучшим способом было бы ПОКАЗАТЬ ТАБЛИЦЫ, а затем выполнять каждое удаление в цикле через набор результатов.
ХТХ.
JDBC позволяет вам решить вашу задачу независимо от базы данных:
- Открыть соединение
- Возьмите метаданные базы данных
- Используйте его для вывода списка всех таблиц в вашей базе данных. JavaDoc
- Перебрать набор результатов и запустить DROP TABLE для каждой таблицы.
Более простое решение - использовать JDBC для запуска " drop database foo " затем " создать базу данных foo " ;. Однако это приведет к удалению всех объектов в БД (т. Е. Не только таблиц).
Если вы работаете из командной строки, а не из JDBC, это должно помочь вам начать работу.
SELECT 'DROP TABLE ' || schemaname ||'.' || tablename || ';'
FROM SYS.SYSTABLES
INNER JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID = SYS.SYSSCHEMAS.SCHEMAID
;
Простое решение - щелкнуть правой кнопкой мыши - > отключите, затем удалите папку, содержащую вашу базу данных, и снова подключите ее.
Загрузите Squirrel SQL с http://squirrel-sql.sourceforge.net/
Подключитесь к базе данных.
Разверните узел TABLE.
Выберите таблицы, которые вы хотите удалить.
Щелкните правой кнопкой мыши и выберите - > Скрипты - > Скрипты удаления таблицы
Запустите сгенерированные запросы
Вы даже можете выбрать удаление записей, чтобы очистить выбранные таблицы.