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