DBUnitの:名前が完全に一致しないため、「MYDB」カタログに<にschema.table>「MYSCHEMA .MYTABLE」の列「MYCOL」が見つかりませんでした

StackOverflow https://stackoverflow.com/questions/1060027

  •  21-08-2019
  •  | 
  •  

質問

私は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.4.4のスナップショットビルドを使用して、それを修正したことを見ました。私は2.4.4の定期的なリリースビルドを使用しています。

任意のアイデア?

役に立ちましたか?

解決

これは、DB2ドライバのバグのようです。

あなたのログを見れば、

は、スキーマ名に予備のスペースを持っています。このスキーマ名は、DB2ドライバによって返されます。 DbUnitを最後のソースにこの特定のエラー(バグ2838922)のために実装されます。

のように修正 バグ2838922で述べたように、

、これは完全に問題を解決しない場合があります。

このような場合は、

、残りの問題を回避するには、例として、デフォルト1を取り、次のように「マッチ」の方法を変更することで、独自の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;
        }

(あなたも平等テストの前にスキーマ名をtrimingすることにより、独自のIMetadataHandlerの最初のスキーマ名の問題を解決することができます)。

のページ http://dbunit.sourceforge.net/properties.html の方法を示していますIMetadataHandlerの実装を交換します。

他のヒント

この問題は、DB2を使用しただけで、その後に発生するようですし、 DBUnitの2.4.7で固定されています。 のます。

あなたがしなければならないすべては、次のとおりです。

IDatabaseConnection connection = ...

connection.getConfig().setProperty
(
    "http://www.dbunit.org/properties/metadataHandler",
    new Db2MetadataHandler()
);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top