0

由于数据迁移,如何将两个不同数据库中的值与列中的相同数据进行比较。我正在运行 jUnit 测试并且值没有通过相同的测试。我究竟做错了什么?正确知道我将源数据库和目标数据库设置为同一个数据库,即它们是相同的东西。我这样做是因为我想确保连接在整个过程中都是正确的,并将任何问题缩小到语法错误。名称列的行中的值为;计划管理、错误和增强、硬件和软件请求。

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 子句,否则无法保证返回结果的顺序。

检查 target.next() 的结果,以便正确处理两个结果集大小不相等的情况。

于 2012-12-04T10:53:40.077 回答