比较结果集在java中

时间:2013-04-05 04:48:02

标签: java jdbc resultset

我正在寻找比较java(ResultSetRS1)中两个RS2的方法。

需要注意的事项/要求

  • 结果集来自两个不同的数据库(Oracle& SQl-Server)。因此,我无法进行任何sql查询更改以复制所提取的结果。

    < / LI>
  • ResultSet中的任何一个都可以拥有更多的行。

  • ResultSet中的任何一个都可能包含其他ResultSet

  • 中的数据

示例:

RS1                        RS2
Column1 Column2            Column1 Column2 Column3
A       1                  A       2       ITEM1
C       1                  B       4       ITEM2
D       2                  C       2       ITEM3
E       5                  D       1       ITEM4

预期结果

==&GT; A有效,因为它位于RS1&amp;对于RS2中的A,RS2,也是Column2&gt; RS1中的A Column2

==&GT; B无效,因为RS1中没有它

==&GT; C有效,因为它位于RS1&amp;对于RS2中的C,RS2也是Column2&gt;对于RS1中的C,Column2

==&GT; D无效,因为即使它位于RS1RS2中,但{2}中的Column2仍然存在于Column2RS2中。 RS1中的D为{{1}}

==&GT; E无效,因为{{1}}

中没有

寻找解决此问题的可能方案。

4 个答案:

答案 0 :(得分:3)

遍历您的ResultSet并将其存储在Map<String, Integer>中。之后,您可以遍历keySet中的任何一个并继续比较values

这使您可以比较任何类型的数据库(ResultSet)中的2 Oracle, MySql, SQLServer, etc.

答案 1 :(得分:0)

我只是将结果读入两个映射,其中key作为主键,在您的情况下似乎是Column1,值为Column2。

然后你可以遍历第一张地图的入口集,看看第二张地图是否有钥匙,如果是,则比较这些值。

答案 2 :(得分:0)

我建议读取每个ResultSet中的值,然后将它放在List中 比较两个列表。
您可以对每个结果集执行getMetaData以获取有关列的信息。
这将包括列数等信息,然后您将能够编写一个简单的循环,它将获取每列的值并将其添加到列表中。

答案 3 :(得分:0)

循环遍历第一个ResultSet并将它们存储在HashMap<String , Object>中,其中使用column1作为Key,并将所有剩余列放在Bean对象中。

在迭代完第二个resultSet之后,通过只进行查找来检查是否存在于HashMap中的column1。如果存在,则使用getValue获取Object,然后与resultSet2列进行比较。