我有一个要求,我想协调 DB2 中不同数据库中的表之间的数据,并将差异作为 java 中的报告输出。
我想到的做法是:
- 读取 Java map 集合中的第一个表
- 读取 Java map 集合中的第二个表
- 比较两张 map
- 在报告中输出差异
有没有其他有效的方法通过 java 和 sql 来做到这一点?
表格将包含大约 10 到 15 列和大约 20000 行数据。
我的方法正确吗?
P.S.:不允许将一个表联合到另一个数据库等。
最佳答案
如果表太大,可以填满内存。这可不是什么好事。
你可以做的是一个使用两个连接的 Java 存储过程(一个定义了 SP,另一个是远程连接) 您可以通过“模拟”Zig Zag 连接来比较这两个表。首先,对所有列进行排序(按 1、2、4、... 排序),然后,获取一个数据库中表的第一行,并将其与另一个数据库中表的第一行进行比较。如果两者相同,则两者都向前移动。如果它们不相同,则向前移动较低的值,直到到达另一个表的相同值。您向用户展示不同之处,也可以给出相似之处。
例如,有两列的表 (c1 char(1), c2 int)
DB1 DB2
Table 1 | Zig zag | Table 1
c1 | c2 | | | c1 | c2
a 1 1 1 a 1
b 2 2 2 c 2
3 d 3
e 3 3
f 4 4 4 f 4
f 5 5 5 f 6
f 7 6
6 f 8
差异
DB1 Table 1
c1 | c2
b 2
e 3
f 5
f 7
DB2 Table 1
c1 | c2
c 2
d 3
f 6
f 8
Similarities
2 rows
c1 | c2
a 1
f 4
然后,您的存储过程可以返回 3 个结果集,指出每个表的差异和相似之处。 顺便说一句,如果您可以联合两个数据库,您也可以在纯 SQL-PL 或 PL/SQL 中执行此操作(我认为没有理由不这样做)
关于java - 比较来自 DB2 中不同数据库的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21374608/