Проверка базы данных проходит так, как вы и ожидаете

StackOverflow https://stackoverflow.com/questions/495376

Вопрос

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

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

  • A:У меня правильные данные о базе данных

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

Что вам нужно иметь, так это в основном модульные тесты для вашей базы данных."Должен существовать столбец с именем FOOBAR, тип должен быть целочисленным.Никаких внешних ключей не может существовать и т.д."

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

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

ПОЛЬЗОВАТЕЛЬСКИЕ ТАБЛИЦЫ ПОЛЬЗОВАТЕЛЬСКИЕ ПРОСМОТРЫ ПОЛЬЗОВАТЕЛЬСКАЯ ПРОЦЕДУРА

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

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

С уважением К

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top