Схема 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'