dbunit架构与h2和oracle有关,架构始终是公共的
从以前的oracledb导出中,我有包含大量数据的xml和dtd文件,但是当我尝试导入数据时,dbunit似乎忽略了dtd文件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
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.xmlT1.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]