Как проверить, существует ли база данных в Hsqldb / Derby? - PullRequest
6 голосов
/ 27 сентября 2010

Я ищу информацию о том, как проверить, существует ли база данных - из кода Java - в hsqldb и в Apache Derby. В Mysql это довольно просто, потому что я могу запросить системную таблицу - INFORMATION_SCHEMA.SCHEMATA - но у этих двух баз данных такой таблицы нет.

Что является альтернативой запросу MySQL:

 SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = <DATABASE NAME>

чтобы узнать, существует ли база данных в hsqldb и apache derby?

Ответы [ 2 ]

7 голосов
/ 27 сентября 2010

Проверка существования базы данных

Одним из решений является добавление «; ifexists = true» к URL-адресу базы данных и попытайтесь открыть базу данных таким образом. Если база данных не существует, вы получите исключение. Это работает и для HSQLDB, и для базы данных H2. Для Apache Derby добавьте «; create = false» (на самом деле, просто убедитесь, что нет «; create = true»). «; Create = false» также работает для базы данных H2, но не для HSQLDB (она там просто игнорируется). Недостаток этого трюка "; ifexists = true" / "; create = false" заключается в том, что вы будете использовать обработку исключений для управления потоком приложений, чего следует избегать (не только потому, что генерирование исключений происходит медленно). Кроме того, вы бы открыли соединение, которое вы можете не хотеть. Обновление: HSQLDB 2.x, кажется, печатает трассировку стека в System.err (!), Если база данных не существует и вы используете "; ifexists = true", в дополнение к выдаче исключения.

Вы можете проверить, существует ли файл (ы) базы данных. Недостатком является то, что это зависит от того, как URL базы данных сопоставляется с именем файла, что зависит от внутренних элементов базы данных, таких как тип базы данных и версия базы данных (!), И, возможно, от системных свойств. Для Derby вам нужно проверить, существует ли каталог, и дополнительно для какого-нибудь файла, такого как «service.properties» (кажется). Для HSQLDB вы можете проверить, существует ли файл databaseName.properties. Для H2 проверьте наличие файла databaseName.h2.db. Это относится к текущим версиям Derby / HSQLDB / H2 и может измениться в будущем.

Вопрос, конечно же: зачем вам знать, если база данных уже существует?

Проверка существования схемы

Может быть, вы на самом деле не хотите проверять, существует ли база данных . Вместо этого вам нужно только проверить, существует ли данная схема в базе данных. Для этого вы можете использовать

SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '<SCHEMA NAME>'

Это работает как для HSQLDB (начиная с версии 2.x), так и для H2. Это также работает с другими базами данных. Единственным исключением является Derby, который не поддерживает стандартизированную схему INFORMATION_SCHEMA.

1 голос
/ 27 сентября 2010

Для HSQLDB 2.0 (используйте последний снимок для лучшей совместимости с MySQL), вам не нужно сильно менять, если ваша база данных / схема не называется «PUBLIC»

При подключении к тестовой базе данных, которая может быть базой данных "все в памяти", по умолчанию создается пустая база данных (которая содержит схему PUBLIC). После этого вы используете

ВЫБРАТЬ SCHEMA_NAME ИЗ ИНФОРМАЦИИ_SCHEMA.SCHEMATA ГДЕ SCHEMA_NAME = 'ИМЯ БАЗЫ ДАННЫХ'

Обратите внимание, что имя должно быть в одинарных кавычках. Я не знаю, принимает ли MySQL имя в одинарных кавычках или нет.

Если схема не существует, вы запускаете код создания схемы, как это было бы с MySQL.

...