Схема dbunit связана с h2 и oracle, схема всегда PUBLIC

Из предыдущего экспорта базы данных Oracle у меня есть файлы xml и dtd с большим количеством данных, но dbunit, похоже, игнорирует файлы dtd при попытке импортировать данные.

flatXMLBuilder.build(xmlFile);

Я всегда получаю это сообщение об ошибке при попытке ссылки на один объект таблицы:

ERROR Table 'TABLE' not found in tableMap=org.dbunit.dataset.OrderedTableNameMap

и предупреждение:

WARN  session=global o.d.database.DatabaseConnection - The given schema 'SA' does not exist

Я не уверен, что включение dtd-файлов решит проблему схемы (которая всегда установлена ​​на PUBLIC), но я был бы рад, если бы я по крайней мере мог проверить это. Файлы всегда находятся в одном каталоге:

T1.xml
T1.dtd

Также основной проблемой, кажется, является схема, которая всегда установлена ​​в PUBLIC на моей целевой H2 в памяти дБ. Я опробовал некоторые методы набора схем, такие как "set schema" или "init=create schema" в URL-адресе соединения, но currenttschema всегда была публичной.

Поэтому, когда я вошел в систему как пользователь SA, например, я не смог найти никаких таблиц, потому что в схеме SA нет таблиц только в PUBLIC.

Я также попробовал метод setSchema(String) на h2connection, но он не работает (я получаю неуловимую ошибку при вызове)

Обновление: в настоящее время я использую FileInputStream, чтобы прочитать файл dtd и добавить его в сборщик:

builder.setMetaDataSetFromDtd(dtdStream);

Но это не помогло с проблемой.

1 ответ

Решение

Если вы хотите создать схему x, а также установите схему по умолчанию x, в базе данных URL, то вам нужно использовать:

jdbc:h2:~/data/databaseName;init=create schema if not exists x\;set schema x

Пожалуйста, обратите внимание на точку с запятой. В Java вам также нужно избегать обратной косой черты:

String url = "jdbc:h2:~/data/databaseName;init=create schema if not exists x\\;set schema x";

Этот URL немного длинный. Возможно, вы захотите переместить все операторы в сценарий инициализации и просто запустите это:

jdbc:h2:~/data/databaseName;init=runscript 'init.sql'
Другие вопросы по тегам