DbUnit设置:
DatabaseConfig config = connection.getConfig();
config.setProperty(DatabaseConfig.FEATURE_SKIP_ORACLE_RECYCLEBIN_TABLES, true);
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new org.dbunit.ext.oracle.OracleDataTypeFactory());
码:
@Test
@DataSet(value="ReportTest.testPropagationToChild.xml", loadStrategy=RefreshLoadStrategy.class)
public void testPropagationToChild() {
资料集:
<dataset>
<REPORT ID="-1" NODE_NAME="TG1" NODE_LEVEL="2" PARENT_ID="0" RENA_STATUS="1" PSR_STATUS="1" PSR_AMOUNT="200" RENA_AMOUNT="1000" PSR_LAST_UPDATED_BY="u11" RENA_LAST_UPDATED_BY="u2"/>
表:
ID PARENT_ID NODE_NAME NODE_LEVEL RENA_STATUS RENA_LAST_UPDATED RENA_LAST_UPDATED_BY RENA_AMOUNT PSR_STATUS PSR_LAST_UPDATED PSR_LAST_UPDATED_BY PSR_AMOUNT RENA_COMMENT ADDITIONAL_COMMENT
例外:
Caused by: org.dbunit.dataset.NoSuchColumnException: REPORT.PSR_LAST_UPDATED_BY - (Non-uppercase input column: PSR_LAST_UPDATED_BY) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive.
其他列(例如ID等)也可以导入。我正在使用Oracle 11g,dbunit 2.4.8
为什么无法导入PSR_LAST_UPDATED_BY?
谢谢!
最佳答案
我相信您的例外告诉您出了什么问题:
(非大写输入列:PSR_LAST_UPDATED_BY)在
ColumnNameToIndexes缓存映射。请注意,地图的列名是
不区分大小写。
在我看来,您的列是使用大小写混合的形式创建的,在这种情况下,需要在双引号中引用它,而在字典中正是这样。不确定如何在DBUnit中执行此操作。显然在某处有一个“映射”定义了表的列,并采用了大写的列名。最好将列重命名为全部大写。
This SO question/answer说明了我相信这里正在发生的事情。
关于java - DbUnit没有看到Oracle列NoSuchColumnException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6692426/