Удалить все таблицы в Derby DB

Как удалить все таблицы в схеме в Apache Derby DB с помощью JDBC?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
14
0
30 877
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Я думаю, что большинство поставщиков db не разрешают DROP TABLE * (или аналогичный).

Я думаю, что лучше всего было бы ПОКАЗАТЬ ТАБЛИЦЫ, а затем выполнять каждое удаление в цикле с помощью набора результатов.

HTH.

Сделайте небольшой метод в java, в котором вы выполняете

DROP TABLE [tablename]

tablename передается параметром.

И еще один метод, в котором вы перебираете набор записей, сформированный запросом.

SELECT tablename FROM SYSTABLES

вызов первого метода.

Последняя версия документации Derby

Должен быть какой-то порядок удаления.

Clark Bao 25.08.2011 09:57

JDBC позволяет решить вашу задачу независимо от базы данных:

  1. Откройте соединение
  2. Возьмите базу данныхMetaData
  3. Используйте его, чтобы перечислить все таблицы в вашей базе данных JavaDoc
  4. Перебрать набор результатов и запустить DROP TABLE для каждой таблицы
  1. вы должны сгенерировать схему и имя таблицы из системного каталога Derby DB.
  2. Упорядочить все таблицы по отношению.
  3. Сгенерировать оператор Java для удаления всех таблиц
  4. Используйте метод autoCommit () и установите для этого метода значение false. для ручной фиксации или отката транзакций при возникновении ошибок.
  5. Запустите Java-процесс. Удачи.

Более простое решение - использовать JDBC для запуска «drop database foo», а затем «create database foo». Однако это приведет к удалению всех объектов в БД (т.е. не только таблиц).

Ответ принят как подходящий

Для реального кода, который делает это, проверьте CleanDatabaseTestSetup.java в разделе набора тестов Derby дистрибутива Derby.

Вероятно, вы ищете svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/… - он содержит фактический метод dropSchema (), который удаляет одну базу данных (вместо всех пользовательских баз данных в данном соединении).

tucuxi 30.08.2010 21:24

Я отредактировал свой ответ, чтобы исправить расположение ссылки для нового макета исходного кода после Derby 10.15. Кроме того, ссылка в предыдущем комментарии страдает той же проблемой и теперь должна быть svn.apache.org/viewvc/db/derby/code/trunk/java/…

Bryan Pendleton 15.09.2020 18:29

Если вы работаете из командной строки, а не через 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/

Подключитесь к базе данных.

Разверните узел ТАБЛИЦА.

Выберите таблицы, которые вы хотите отбросить.

Щелкните правой кнопкой мыши и выберите -> Сценарии -> Сценарии удаления таблицы.

Запустить сгенерированные запросы

Вы даже можете выбрать удаление записей, чтобы очистить выбранные таблицы.

Благодарю блог:

Шаг 1:

Запустите инструкцию SQL, но не забудьте заменить имя схемы "APP" своим именем схемы в двух приведенных ниже случаях:

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, выполните их, после чего ограничения и таблицы будут отброшены.

Другие вопросы по теме