2

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

注意事项/要求

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

  • 任何一个ResultSets 都可以有比彼此更多的行。

  • 任何一个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

预期结果

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

==> B 无效,因为它不在 RS1 中

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

==> D 无效,因为即使它在RS1and中RS2Column2RS2 中的 D < Column2for RS1 中的 D

==> E 无效,因为它不在RS2

寻找解决此问题的可能选项。

4

4 回答 4

3

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

这使您可以比较ResultSet任何类型的 DB( Oracle, MySql, SQLServer, etc.) 中的 2 s。

于 2013-04-05T04:50:46.740 回答
0

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

之后遍历第二个结果集并通过查找来检查 HashMap 中是否存在 column1。如果存在,则使用 getValue 获取 Object,然后与 resultSet2 列进行比较。

于 2013-04-05T05:35:19.747 回答
0

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

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

于 2013-04-05T04:51:31.560 回答
0

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

于 2013-04-05T05:00:55.820 回答