Apache Derby - Проверить, что база данных уже создана?

Использование Apache Derby с Java (J2ME, но я не думаю, что это имеет значение) есть ли способ проверить, существует ли уже база данных и содержит ли она таблицу?

Ответов (3)

Решение

Я ничего не знаю, кроме нескольких обходных путей, в отличие от MySQL, где у нас есть функция IF EXIST.

Что вы делаете, так это попробуйте подключиться к базе данных, если возможно, ее там нет. А после успешного подключения вы можете сделать простой выбор, например SELECT count (*) FROM TABLE_NAME, чтобы узнать, существует ли таблица или нет. Вы будете в зависимости от исключения. Даже в официальном примере от Sun я видел подобную работу.

В Oracle у нас есть словарные таблицы, чтобы знать об объектах базы данных. Сомневаюсь, что в Дерби есть что-то подобное.

[Отредактировано]

Что ж, я обнаружил, что есть способ узнать, существует ли таблица. Попробуйте ВЫБРАТЬ имя таблицы ИЗ СИСТЕМНЫХ. Это необходимо для проверки существования таблицы, для проверки базы данных вам может потребоваться проделать то же самое, как я объяснил выше.

Адил , вы также можете использовать Connection.getMetaData для возврата объекта DatabaseMetaData , а затем использовать getTables , если, конечно , у вас есть соединение с базой данных. Это дает преимущество работы с любой базой данных с драйвером JDBC, который стоит того.

Чтобы проверить, существует ли база данных, если вы используете Derby встроенным способом или сервер находится на том же компьютере, вы можете проверить, существует ли папка для базы данных. Хотя это немного неуклюже. Я бы сделал так, как предлагает Адиль, и попытался бы подключиться, улавливая исключение, если его нет.

Я бы предложил получить объект DatabaseMetaData, а затем использовать из него метод getTables (null, null, null, new String [] {"TABLE"}), который возвращает ResultSet. Используйте метод next () ResultSet, который возвращает логическое значение, чтобы проверить, существуют ли какие-либо таблицы. Если проверка верна, у вас есть таблицы. Неверно, и база данных пуста.