0

データ移行のため、列の同じデータを使用して 2 つの異なるデータベースの値を比較するにはどうすればよいですか。jUnit テストを実行していますが、値が同じようにテストに合格していません。私は何を間違っていますか?sourceDB と target データベースが同じデータベースに設定されていることを知っています。つまり、それらは同じものです。これを行ったのは、プロセス全体で接続が正しいことを確認し、問題を構文エラーに絞り込むためです。名前列の行の値は次のとおりです。イニシアチブ管理、バグと機能強化、ハードウェアとソフトウェアのリクエスト。

public class DemandTypeCopier {

    public static String QUERY_CREATECOPY = "select name from tr_demandtype where name=?";

}

public void testQUERY_CREATECOPY() throws Exception{

    UnitTestHelper helper = new UnitTestHelper();
    Connection con = helper.getConnection(helper.sourceDBUrl);
    Connection conTarget = helper.getConnection(helper.targetDBUrl);
    String x = "Initiative management";

    PreparedStatement stmt = con.prepareStatement(DemandTypeCopier.QUERY_CREATECOPY);
    stmt.setString(1, x);
    ResultSet sourceVal = stmt.executeQuery();

    stmt = conTarget.prepareStatement(DemandTypeCopier.QUERY_CREATECOPY);
    stmt.setString(1, x);
    ResultSet targetVal = stmt.executeQuery();

    assertTrue(helper.resultSetsEqual(sourceVal,targetVal));

}

public boolean resultSetsEqual (ResultSet source, ResultSet target) throws SQLException{
    while(source.next())
    {
            target.next();
            ResultSetMetaData metadata = source.getMetaData();
            int count = metadata.getColumnCount();
            for (int i =1; i<=count; i++)
            {
               if(source.getObject(i) != target.getObject(i))
               {
              return false;
               }
            }
    }
    return true;
}
4

1 に答える 1

1

問題は、データを比較するときに、オブジェクトが等しいかどうかをテストしていることです。

source.getObject(i) != target.getObject(i)

上記は、両方の結果セットから返されたオブジェクトが同じであるかどうかをテストしますが、ほとんどの場合 (すべて?) はそうではありません。本当にやりたいことは、等しいかどうかをテストすることです。

source.getObject(i).equals(target.getObject(i))

上記は、source.getObject(i) が null を返す場合に NullPointerException をスローすることに注意してください。そのため、データベース内のどの列にも null 値が許可されていない場合を除き、null 値を処理するコードを追加する必要があります。

クエリに ORDER BY 句を追加します。そうしないと、返される結果の順序が保証されません。

2 つの結果セットのサイズが等しくない場合に正しく処理できるように、target.next() の結果を確認してください。

于 2012-12-04T10:53:40.077 に答える