从以前导出的Oracle DB中,我同时拥有包含大量数据的xml和dtd文件,但是当我尝试导入数据时,dbunit似乎忽略了dtdfiles。
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文件的包含是否会修复schemaproblem(总是设置为PUBLIC) 但如果我至少可以测试它,我会很高兴。 这些文件始终位于同一目录中:
T1.xml
T1.dtd
同样核心问题似乎是在内存db中我的目标H2上总是设置为PUBLIC的模式。 我在连接url中尝试了一些模式集方法,如“set schema”或“init = create schema”,但currentchema始终是公开的。
因此,当我以SA用户身份登录时,例如我找不到任何表,因为SA模式中只有PUBLIC中没有表。
我也尝试了h2connection上的setSchema(String)方法,但它不起作用(我在调用时遇到无法捕获的错误)
更新: 目前我使用FileInputStream来读取dtd文件并将其添加到构建器:
builder.setMetaDataSetFromDtd(dtdStream);
但它没有帮助解决这个问题。
答案 0 :(得分:2)
如果要创建架构x
,并在数据库URL中将默认架构设置为x
,则需要使用:
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";
此网址有点长。您可能希望将所有语句移动到init脚本,然后运行:
jdbc:h2:~/data/databaseName;init=runscript 'init.sql'