比较java中不同数据库中的两个数据集(两个结果集)

比较java中不同数据库中的两个数据集(两个结果集),java,hashmap,resultset,Java,Hashmap,Resultset,我试图通过Java比较来自不同数据库的两个数据集。 数据库来源:-oracle、sql和其他数据库。 目标db:Hive 我已经与这两个数据库建立了JDBC连接,并在两个不同的结果集中获取了结果 sourceData targetData 现在我想比较这两个结果集,并指出它们的区别。我考虑的方法是将两个结果集添加到哈希映射并进行比较。请让我知道我的方法是否正确,或者是否有更好的方法来做到这一点 请分享可以帮助我的链接 提前感谢。实施实际上取决于您的需求 行或列的顺序重要吗?您必须比较数据类

我试图通过Java比较来自不同数据库的两个数据集。 数据库来源:-oracle、sql和其他数据库。 目标
db:Hive

我已经与这两个数据库建立了JDBC连接,并在两个不同的结果集中获取了结果

sourceData  
targetData
现在我想比较这两个结果集,并指出它们的区别。我考虑的方法是将两个结果集添加到哈希映射并进行比较。请让我知道我的方法是否正确,或者是否有更好的方法来做到这一点

请分享可以帮助我的链接


提前感谢。

实施实际上取决于您的需求

行或列的顺序重要吗?您必须比较数据类型吗?等等

最简单的方法是使用
orderby
子句运行两个查询,这两个查询都是相同的。并在一次迭代中比较数据集中的行,如:

ResultSet rs1 = ...;
ResultSet rs2 = ...;

boolean rs1next;
boolean rs2next;
while ((rs1next = rs1.next()) || (rs2next = rs2.next())) {
     //do your stuff here
}

与提出的解决方案类似,但使用
Set
s

创建一个holder类,该类保存所有要比较的值,并覆盖
equals()
hashCode()

创建
设置源、目标
(如果行的顺序很重要,请使用
LinkedHashSet
)并将
ResultSet sourceData
中的行添加到
source
,对于
targetData
也一样

然后您可以使用简单的
Set
操作

  • 这将使
    copy
    中的所有元素不会出现在
    target
    中:

    Set<Data> copy = new LinkedHashSet<>(source);
    copy.removeAll(target);
    
    Set<Data> copy = new LinkedHashSet<>(source);
    copy.retainAll(target);
    
    Set<Data> copy = new LinkedHashSet<>(source);
    copy.addAll(target);
    
  • 这将创建
    copy
    target
    中所有元素的并集:

    Set<Data> copy = new LinkedHashSet<>(source);
    copy.removeAll(target);
    
    Set<Data> copy = new LinkedHashSet<>(source);
    copy.retainAll(target);
    
    Set<Data> copy = new LinkedHashSet<>(source);
    copy.addAll(target);
    

    我将帮助您使用hashmap方法本身。 假设设置的包含唯一值。 我下面的代码将帮助您

    Set<Data> soruceData;
    Set<Data> targetData;
    HashMap<Data,Integer> comparisonMap;
    for(Data data:targetData){
     comparisonMap.put(data,0);
    }
    for(Data data:soruceData){
    if(targetData.contains(data))
     comparisonMap.put(data,1);
    else
     comparisonMap.put(data,0);
    }
    
    设置数据;
    设置目标数据;
    HashMap比较映射;
    用于(数据:targetData){
    比较映射put(数据,0);
    }
    对于(数据:soruceData){
    if(targetData.contains(数据))
    比较映射put(数据,1);
    其他的
    比较映射put(数据,0);
    }
    
    现在您得到了一个hashmap,它表示两个列表之间的差异。 1-表示存在两组 0-平均值不存在于任何一个集合中


    注意请在使用set和hascode时正确执行hascode和equals

    如果没有比较逻辑,很难提出解决方案。请说明您希望如何比较数据。基于id、名称或所有字段。@RaMPrabU我想比较结果列,表中有pk列和非pk列。我想按列进行比较。感谢您必须正确地实现equals方法和hascode方法(根据您的逻辑),我希望我的回答有助于找出差异。为什么不使用
    布尔值而不是
    整数呢?@Lino也可以