2013-04-05 32 views
2

我正在寻找方法来比较java中的两个ResultSet s(RS1RS2)。在java中比较结果集

需要注意的事项/要求

  • 结果集是从两个不同的数据库(Oracle & SQl-Server)。因此我不能做任何SQL查询更改copare结果牵强。

  • 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 

预期结果

==>甲是有效的,因为它在RS1 & RS2,也Column2对于A在RS2>Column2对于A在RS1

==> B是无效的,因为它是不存在在RS1

==> C是有效的,因为它是在RS1 & RS2,在RS1还Column2对C在RS2>Column2对于C

==> d是无效的,因为,即使它是在有和RS1RS2,所述Column2为d在RS2 < Column2为d的RS1

==> E是无效的,因为它不存在于RS2

寻找可行的方案来解决这个问题。

回答

3

遍历您的ResultSet s并将它们存储在Map<String, Integer>中。之后,您可以遍历keySet,并继续比较values

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

+0

@RJ道歉配对地图只适用于关键值对。我的一个RS有3个值。道歉,没有提到,最初在询问查询时我认为这不会有什么区别:( – misguided 2013-04-05 05:03:17

+0

@misguided - 你是对的,即使现在也没有什么区别,你不应该担心关于'column3',因为你不会把它放到你的地图中,也不会放在你的支票上。让ResultSet返回3列,你只需要从中选择第1和第2列来填充你的'Map'。 – SudoRahul 2013-04-05 05:11:07

+0

@RJ如果我想在RS1中打印第3列中的RS2项目,我该怎么办? – misguided 2013-04-05 05:14:25

0

我只是简单地将结果读取到两个地图中,键为主键,在您的情况下,它似乎是Column1,值为Column2。

然后,您可以遍历第一个映射的条目集,并查看第二个映射是否具有该键,如果是,则比较这些值。

+0

配合其中一个RS有3个值,在最初的查询中忘了提到这个道歉。 – misguided 2013-04-05 05:04:15

0

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

0

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

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