java - 比较来自 DB2 中不同数据库的两个表

标签 java db2

我有一个要求,我想协调 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/

相关文章:

java - 可以将 IntelliJ 配置为在不使用快捷方式的情况下调用 SmartType 代码完成吗?

Java 线程池

java - 根据服务名称和参数缓存 Hessian 服务结果

java - 为什么 AmazonS3Client 不使用我设置的代理?

db2 - AS400索引配置表

DB2 将长值转换为时间戳

java - 如何在 Spring 进行模仿

db2 - 如何通过 WebSphere 启用和收集 DB2 跟踪?

db2 - 如何在 z/OS 中编写 DB2 命令脚本?

db2 - 如何在 db2 中将时间戳转换为 ISO 格式的日期?