完了するために、いくつかの追加情報を投稿する必要があります。実際、データベースからデータを読み取るプロセスが私を閉じ込めたため、以前に投稿したソリューションはまったく機能しません。
「QueryDataset」を使用するプロセスは、データベースからデータを読み取り、データセットとして保存しましたが、このデータセットからデータにアクセスできなくなりました(デバッグモードでデータを表示できましたが)。代わりに、操作全体がorg.dbunit.database.ForwardOnlyResultSetTable.getRowCount(ForwardOnlyResultSetTable.java:73)でUnsupportedOperationExceptionで失敗しました。
失敗を生成するサンプルコード:
QueryDataSet qds = new QueryDataSet(connection);
qds.addTable(“specificTable”);
qds.getTable(„specificTable“).getRowCount();
この方法で試してみても失敗します。
IDataSet tmpDataset = connection.createDataSet(tablenames);
tmpDataset.getTable("specificTable").getRowCount();
抽出を機能させるには、次の行(2番目の行)を追加する必要があり
ます。IDataSettmpDataset = connection.createDataSet(tablenames);
IDataSet actualDataset = new CachedDataSet(tmpDataset);
素晴らしい、これはどこにも文書化されていませんでした...
しかし、それだけではありません。「QueryDataSet」を実行した後でも、この行を追加できると思うでしょう...しかし、そうではありません。これはまだ機能しません!それでも同じ例外がスローされます!それは私には意味がなく、私はそれで多くの時間を無駄にしました...
xmlファイルから読み込まれたデータセットからのデータの抽出は問題なく機能することに注意してください。この煩わしさは、データベースから直接データセットを取得しようとしたときに発生します。
上記を実行した場合は、以下のように続行できます。これにより、予想されるxmlファイルで取得した列のみが比較されます。
// put in here some code to read in the dataset from the xml file...
// and name it "expectedDataset"
// then get the tablenames from it...
String[] tablenames = expectedDataset.getTableNames();
// read dataset from database table using the same tables as from the xml
IDataSet tmpDataset = connection.createDataSet(tablenames);
IDataSet actualDataset = new CachedDataSet(tmpDataset);
for(int i=0;i<tablenames.length;i++)
{
ITable expectedTable = expectedDataset.getTable(tablenames[i]);
ITable actualTable = actualDataset.getTable(tablenames[i]);
ITable filteredActualTable = DefaultColumnFilter.includedColumnsTable(actualTable, expectedTable.getTableMetaData().getColumns());
Assertion.assertEquals(expectedTable,filteredActualTable);
}