gpt4 book ai didi

java - DBUnit:未在目录 'MYCOL' 中找到 'MYSCHEMA .MYTABLE' 的列 'MYDB',因为名称不完全匹配

转载 作者:行者123 更新时间:2023-11-30 07:39:10 24 4
gpt4 key购买 nike

我在使用 org.dbunit.database.QueryDataSet 创建数据库导出时遇到问题。当我调用 org.dbunit.dataset.xml.FlatXmlDataSet.write(IDataSet, OutputStream) 时,我得到以下堆栈跟踪:

java.lang.IllegalStateException: Did not find column 'MYCOL' for <schema.table> 'MYSCHEMA  .MYTABLE' in catalog 'MYDB' because names do not exactly match.
at org.dbunit.database.ResultSetTableMetaData.scrollTo(ResultSetTableMetaData.java:297)
at org.dbunit.database.ResultSetTableMetaData.createColumnFromDbMetaData(ResultSetTableMetaData.java:262)
at org.dbunit.database.ResultSetTableMetaData.createMetaData(ResultSetTableMetaData.java:154)
at org.dbunit.database.ResultSetTableMetaData.createMetaData(ResultSetTableMetaData.java:131)
at org.dbunit.database.ResultSetTableMetaData.<init>(ResultSetTableMetaData.java:97)
at org.dbunit.database.AbstractResultSetTable.<init>(AbstractResultSetTable.java:84)
at org.dbunit.database.AbstractResultSetTable.<init>(AbstractResultSetTable.java:63)
at org.dbunit.database.ForwardOnlyResultSetTable.<init>(ForwardOnlyResultSetTable.java:65)
at org.dbunit.database.CachedResultSetTableFactory.createTable(CachedResultSetTableFactory.java:52)
at org.dbunit.database.AbstractDatabaseConnection.createQueryTable(AbstractDatabaseConnection.java:90)
at org.dbunit.database.AbstractDatabaseConnection.createTable(AbstractDatabaseConnection.java:115)
at org.dbunit.database.QueryTableIterator.getTable(QueryTableIterator.java:143)
at org.dbunit.dataset.stream.DataSetProducerAdapter.produce(DataSetProducerAdapter.java:83)
at org.dbunit.dataset.xml.FlatXmlWriter.write(FlatXmlWriter.java:124)
at org.dbunit.dataset.xml.FlatXmlDataSet.write(FlatXmlDataSet.java:341)

在研究这个问题时,我看到其他人在 2 月份遇到了这个问题,并使用 2.4.4 的快照版本修复了它。我使用的是 2.4.4 的常规发布版本。

有什么想法吗?

最佳答案

这似乎是 DB2 驱动程序中的错误。

如果您查看您的日志,您会发现模式名称中有一个空闲空间。此模式名称由 DB2 驱动程序返回。已针对 dbunit 的最后一个源代码中的此特定错误实现修复(错误 2838922)。

如错误 2838922 中所述,这可能无法完全解决问题。

如果是这种情况,剩下的问题的解决方法是以默认的 IMetadataHandler 为例,并按如下方式更改“匹配”方法来实现您自己的 IMetadataHandler:

    ...
boolean areEqual =
areEqualIgnoreBothNull(catalog, catalogName, caseSensitive) &&
areEqualIgnoreNull(schema, schemaName, caseSensitive) &&
areEqualIgnoreNull(table, tableName, caseSensitive) &&
areEqualIgnoreNull(column, columnName, caseSensitive);

return areEqual;


private boolean areEqualIgnoreBothNull(String value1, String value2,
boolean caseSensitive) {
boolean areEqual = true;
if (value1 != null && value2 != null) {
if (value1.equals("") && value2.equals("")) {
if (caseSensitive) {
areEqual = value1.equals(value2);
} else {
areEqual = value1.equalsIgnoreCase(value2);
}
}
}
return areEqual;
}

(您还可以通过在相等性测试之前修剪架构名称来解决您自己的 IMetadataHandler 中的第一个架构名称问题)

页面http://dbunit.sourceforge.net/properties.html展示了如何替换 IMetadataHandler 的实现。

关于java - DBUnit:未在目录 'MYCOL' 中找到 <schema.table> 'MYSCHEMA .MYTABLE' 的列 'MYDB',因为名称不完全匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1060027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com