Проверка существования базы данных
Одним из решений является добавление «; 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.