Проверка базы данных такова, как вы ожидаете - PullRequest
1 голос
/ 30 января 2009

Я писал java-приложение на своей машине, и оно отлично работает с установленной БД, но когда я устанавливаю его на сайте, оно взрывается, потому что БД немного отличается

Итак, я нахожусь в процессе написания кода для проверки того, что:

  • A: У меня правильные данные БД

  • B: В базе данных есть все ожидаемые таблицы, и в них есть правильные столбцы.

У меня А, но я понятия не имею, с чего начать, Б, есть предложения?

Целевая БД для текущего клиента - Oracle, но приложение также может быть настроено для работы на SQL Server. Так что общее решение будет оценено, но не обязательно, так как я уверен, что смогу понять, как сделать одно из другого.

Ответы [ 9 ]

4 голосов
/ 30 января 2009

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

http://www.alberton.info/oracle_meta_info.html

1 голос
/ 30 января 2009

Я использую DbUnit для тестирования баз данных. Это решение на основе Java, которое хорошо интегрируется с Junit . Его можно использовать практически без Java. Я не использовал его в точно такой же ситуации, как вы описали, но он должен быть достаточно близко для работы.

1 голос
/ 30 января 2009

Для этого вы можете использовать инструмент миграции базы данных, такой как LiquiBase - большинство из этих инструментов имеют некоторый способ проверки базы данных. У меня нет личного опыта его использования, так что это предположение.

0 голосов
/ 30 января 2009

Я использую MigrateDB для этого. Он позволяет создавать запросы, которые выполняют такие вещи, как проверка существования заданных таблиц, столбцов, строк, индексов и т. Д. Для данной базы данных, и используют их в качестве «тестов». Если тест не пройден, он запускает «действие» (это просто еще один запрос, который знает, как устранить проблему).

MigrateDB поддерживает несколько платформ баз данных (например, вы можете указать «запрос на проверку существования таблицы» для каждой платформы), полностью настраиваемые тесты (вы можете создать их самостоятельно), поставляется с довольно полными тестами Oracle и может быть запустить в режиме «только аудит», чтобы он только сообщал вам, в чем различия.

Это хорошее, надежное решение.

0 голосов
/ 30 января 2009

Если вы используете простой JDBC, попробуйте использовать этот метод: DatabaseMetadata.getTables и другие аналогичные методы, доступные в классе метаданных.

0 голосов
/ 30 января 2009

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

USER_TABLES USER_VIEWS USER_PROCEDURE

(или для всего) USER_OBJECTS WHERE OBJECT_TYPE = '??'

Чтобы продолжить ... USER_TAB_COLS для столбцов таблицы

С уважением K

0 голосов
/ 30 января 2009

То, что вам нужно, это в основном юнит-тесты для вашей базы данных. «Должен существовать столбец с именем FOOBAR, тип должен быть Integer. Внешние ключи не могут существовать и т. Д.»

Это выполнимо с обычными JUnit и JDBC (запросите у метаданных таблицы), поскольку вы можете быть уверены, что абсолютно уверены в том, что делается, что может быть сложнее при использовании, например. DBUnit.

0 голосов
/ 30 января 2009

Немного другой кусок мог бы быть лучше обработан, сначала создав сценарий создания базы данных. Автоматизированный процесс дает вам больше шансов сделать два идентичных.

Еще один момент, на который стоит обратить внимание: вы минимизируете свой риск, делая свои среды разработки и разработки идентичными - одна и та же схема базы данных и поставщик для обоих. Измените обстоятельства, которые делают эти две разные.

Наконец, вы не говорите, что «немного» отличается, но иногда это неизбежно (например, Oracle использует последовательности, SQL Server использует идентификаторы). Возможно, Hibernate поможет вам более надежно переключаться между поставщиками. Он абстрагирует детали таким образом, что изменение баз данных может означать изменение одного значения в файле конфигурации.

0 голосов
/ 30 января 2009

Наиболее распространенным решением было бы выполнение запросов с предложением select, имеющим ожидаемые связи, и предложением from, имеющим имена таблиц, в блоке try catch. Вы можете поместить предложение where как 1 = 2, чтобы не извлекать какие-либо данные. Если запрос выполнен без исключения, вы получите ожидаемую таблицу и столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...