如何创建一个实用程序方法来比较来自两个模式

时间:2018-01-10 10:25:02

标签: java sql jdbc resultset

假设我有两个模式 TestSchema1 TestSchema2 。这两个模式具有相同的表和结构。另外,我有SQL查询

Select * from table_one where table_field = 'xyz'.

Select * from table_two;

这两个表 table_one table_two 可以包含任何列。但是,模式TestSchema1和TestSchema2中的table_one具有完全相同的结构(数据可以不同)。

如何创建一个实用程序方法,用于比较两个模式中SQL语句的数据?类似的东西:

public boolean isDataSameInBothSchemas(String query){
//logic to compare data
}

更新:我还需要知道数据不匹配时的列,所以我不能使用  减去数据库中的操作。

1 个答案:

答案 0 :(得分:0)

对于oracle,您可以使用

Select * from schema1.table_two
minus
Select * from schema2.table_two

如果查询没有返回任何行,则数据是相同的。

更新: 查询也必须没有记录。

Select * from schema2.table_two
minus
Select * from schema1.table_two

我们需要从表2的行中减去表1的行,反之亦然。

对于java解决方案,您需要引入一个RowDTO类来存储每个查询的行数据。

然后为equals()引入RowDTO方法来比较对象。

将两个查询结果添加到Set<RowDTO>。 (可以是例如HashSet)。

在查询之后,您将相应地拥有两组。

Set<RowDTO> schema1Set;
Set<RowDTO> schema2Set;

您可以使用Set interface的方法

boolean retainAll(Collection<?> c);
boolean removeAll(Collection<?> c);

找出差异并使用剩余的项目来找出究竟有什么不同。

如果你需要找到diff列,那么引入一个自定义的util方法来逐字段比较并显示不同的字段。