2016-12-12 1 views
2

У меня есть полная база данных h2 с большим количеством данных. Я хочу снова запустить интеграционные тесты этих данных.H2: генерировать скрипт сценариев вставки скриптов

Вопрос1:Возможно ли генерировать * .sql файлы вставки/скрипты из полной базы данных h2?

У меня есть SCRIPT TO 'fileName' как описано here. Но он генерирует только CREATE/ALTER TABLE/CONSTRAINT запросов, означает создание схемы без данных.

Если ответ на первый вопрос - «Impossible», чем:

Вопрос2:ли * .sql вставка файлов единственный способ вставить начальный набор данных в h2 дб для интеграции тестов?

+0

@Berger исправьте меня, если я ошибаюсь, но эта ссылка касается конфигурации Spring со встроенным h2. Они используют сценарий 'db/sql/insert-data.sql' для инициализации данных. Мой вопрос заключается в том, как автоматически создавать сценарий 'db/sql/insert-data.sql' из существующей базы данных –

+0

Если вы используете DBUnit, вы можете добавить набор данных, который вы можете создать из своих собственных запросов. Я обсуждаю об этом в этом сообщении: http://stackoverflow.com/questions/40884098/hibernate-is-it-possible-to-save-cascade-only-on-test/40884456#40884456 – davidxxx

+0

@davidxxx Я могу ввести начальное данные без DBUnit с простым sql. Проблема в том, что набор данных довольно большой, и я потрачу по крайней мере несколько дней, чтобы описать набор данных init. –

ответ

3

Question1: Можно ли сгенерировать * .SQL вставить файлы/скрипты из полной базы данных h2?

Я только что протестировал с одной из моих файловых баз данных H2, и в результате экспорт экспортирует как структуру, так и данные.
Я протестировал версию 1.4.193 H2.

оба способа экспортирующей работы:

  • SCRIPT команды из консоли H2
  • org.h2.tools.Script инструмент из командной строки.

1) Я проверил сначала инструмент org.h2.tools.Script, как я его уже использовал.

Вот минимальная команда структуры экспорта и данных:

java -cp <whereFoundYourH2Jar> org.h2.tools.Script -url <url> 
    -user <user> -password <password> 

Где:

  • <whereFoundYourH2Jar> это путь к классам, где у вас есть h2.jar LIB (я использовал это тот, который my m2 repo).
  • <url> это адрес вашей базы данных
  • <user> является пользователь базы данных
  • <password> пароль базы данных

У вас есть больше деталей в официальной помощи org.h2.tools.Script инструмента:

Creates a SQL script file by extracting the schema and data of a database. 
Usage: java org.h2.tools.Script <options> 
Options are case sensitive. Supported options are: 
[-help] or [-?] Print the list of options 
[-url "<url>"]  The database URL (jdbc:...) 
[-user <user>]  The user name (default: sa) 
[-password <pwd>] The password 
[-script <file>] The target script file name (default: backup.sql) 
[-options ...]  A list of options (only for embedded H2, see SCRIPT) 
[-quiet]   Do not print progress information 
See also http://h2database.com/javadoc/org/h2/tools/Script.html 

2) Я проверил команду SCRIPT с консоли H2. Он также работает.

Выполнение команды SCRIPT может привести к ошибке.
Посмотрите на официальной документации:

Если нет «FileName» п задан, сценарий возвращается в виде набора результата. Эта команда может использоваться для создания резервной копии базы данных . Для длительного хранения он более переносимый, чем копирование файлов базы данных .

Если задано предложение «TO fileName», тогда весь сценарий (включая вставные операторы) записывается в этот файл, и возвращается результат без операторов вставки.

Вы использовали команду SCRIPT TO 'fileName'. В этом случае весь скрипт (включая вставные операторы) записывается в этот файл и, как результат, в консоли H2, у вас есть все, кроме операторов вставки.
Например, введите команду SCRIPT TO 'D:\yourBackup.sql' (или дружественный Unix-каталог, если вы ее используете), затем откройте файл, вы увидите, что в нем присутствуют SQL.

Как указано в документации, если вы хотите получить инструкции структуры и вставки в выходном результате консоли H2, не указывайте аргумент TO. Просто введите: SCRIPT.

Вопрос2: Есть * .sql вставка файлов единственный способ вставить начальный набора данных в h2 дб для интеграции тестов?

Как долго обсуждалось :) вы можете использовать DBunit dataset (решение среди других).

Смежные вопросы