dbunit架构与h2和oracle有关,架构始终是公共的

dbunit架构与h2和oracle有关,架构始终是公共的,oracle,database-schema,h2,dbunit,in-memory-database,Oracle,Database Schema,H2,Dbunit,In Memory Database,从以前的oracledb导出中,我有包含大量数据的xml和dtd文件,但是当我尝试导入数据时,dbunit似乎忽略了dtd文件 flatXMLBuilder.build(xmlFile); 尝试引用表的一个对象时,我总是收到以下错误消息: ERROR Table 'TABLE' not found in tableMap=org.dbunit.dataset.OrderedTableNameMap 以及警告: WARN session=global o.d.database.Databas

从以前的oracledb导出中,我有包含大量数据的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文件是否会修复schemaproblem(它总是设置为PUBLIC) 但如果我至少能测试一下,我会很高兴的。 这些文件始终位于同一目录中:

T1.xml
T1.dtd

此外,核心问题似乎是在内存数据库中的目标H2上始终设置为公共的模式。 我在连接url中尝试了一些模式集方法,如“set schema”或“init=create schema”,但currentschema始终是公共的

因此,当我以SA用户身份登录时,例如,我找不到任何表,因为SA模式中没有表,只有公共的表

我还在H2连接上尝试了setSchema(String)方法,但它不起作用(我在调用时收到一个不可跟踪的错误)

更新: 目前,我使用FileInputStream读取dtd文件并将其添加到生成器:

builder.setMetaDataSetFromDtd(dtdStream);

但这对解决问题没有帮助。

如果要在数据库URL中创建架构
x
,并将默认架构设置为
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";
这个URL有点长。您可能希望将所有语句移动到init脚本中,然后运行该脚本:

jdbc:h2:~/data/databaseName;init=runscript 'init.sql'

您好,看来我在连接url上根本没有使用正确的语法。根据您的版本设置模式。但是缺少表格的问题仍然存在,我明天将继续我的研究。我是否有可能使用您的h2 webtool连接并查看h2内存数据库?(我当前的配置是(jdbc:h2:mem:db1;+Schema)是的,但是您不能使用内存中的数据库,所以您需要使用
jdbc:h2:~/data…
而不是
jdbc:h2:mem:…
。然后,将
;auto_server=true
附加到数据库URL。或者使用服务器模式(但这有点复杂)。在何处放置
init.sql
使其对H2可见?我得到错误
FileNotFoundException:init.sql(没有这样的文件或目录)”;“init.sql”;sql语句:运行脚本自'init.sql'[90031-197]