2014-02-14 107 views
3

我有两个数据库,我需要从每个数据库比较三行,如果他们匹配,我必须打印该行。如何比较两个不同数据库的结果集?

实施例:

Database 1: 
RuleId Dataset Partition Date 
------ ------- -------- ---- 
1234  ABVD 012145 21/01/2014 
1256  ABCD 124565 22/01/2013 
4567  FGHJ/02/2013 
Database 2: 
1234 ABCD/01/2014 
4567 FGHJ/02/2013 
7894 MNBV 0147896 20/01/2014 

如果RuleId,数据集和分区是在两个数据库中我在输出打印的行相等。

我的代码如下:

ArrayList<String> rslist = new ArrayList<String>(); 
ArrayList<String> rs1list = new ArrayList<String>(); 
int count = 1; 
while (rs.next()) { 
    int i = 1; 
    count = 1; 
    while (i < count) { 
     rslist.add(rs.getString(i++)); 
    } 

    rslist.add(rs.getString(2) + rs.getString(4) + (rs.getString(5))); 

} 
int count1 = 1; 
while (rs1.next()) { 
    int i = 1; 
    count1 = 1; 
    while (i < count1) { 
     rs1list.add(rs1.getString(i++)); 

    } 
    rs1list.add(rs1.getString("RuleId") + rs1.getString("Dataset") 
      + rs1.getString("Partition")); 
} 
for (String s1 : rslist) 
    for (String s2 : rs1list) 
     if (s1.equals(s2)) { 

     } 

如果这些行等于我必须打印所有的行值。

+1

问题是什么? – Sanjeev

+0

我必须一次比较6个结果集值,如果它们匹配,那么我必须打印整行 –

+0

是不是您当前的代码执行此操作?它似乎在做这项工作。 – Sanjeev

回答

0

ResultSet是Object最终的子类,我们可以直接比较两个或更多对象。 有点具体到你的问题:

ResultSet rs=st.executeQuery(sql1); 
ResultSet rs1=st.executeQuery(sql2); 

其中SQL1和SQL2是2所陈述

while(rs.next() && rs1.next()){ 
     int a=rs.next(); 
     int b=rs1.next(); 
     if(a==b){ 
       System.out.println("Compairing two ResultSets"); 
     } 
    } 
+0

rs.next()返回布尔值不是int!你怎么能比较它们? – Shilan

0

实施例(从头开始),用于在存储器中而不预加载进行比较:从DB2

Connection con1 = DriverManager.getConnection("jdbc:mysql://localhost/db1", "user", "pass"); 
    Connection con2 = DriverManager.getConnection("jdbc:mysql://localhost/db2", "user", "pass"); 

    Statement stmt1 = con1.createStatement(); 
    Statement stmt2 = con2.createStatement(); 

    ResultSet rs1 = stmt1.executeQuery("select * from ... order by ... "); 
    ResultSet rs2 = stmt2.executeQuery("select * from ... order by ... "); 

    while(rs1.next() && rs2.next()) { 
     // compare basically rs1.getObject(i).equals(rs2.getObject(i)) 
    } 

或者从读DB1,然后检索witk PK。我不知道你的用例...

0

如果数据大小是不是大规模的,我建议完全加载的数据集,并在内存比较如下。

定义类来表示实施equals一个记录,它由元件提供比较字段元件的逻辑

public class Record { 
    ... 
    public boolean equals(Object record) { 
     ... 

负载两个数据集到每个一个Set(而不是ArrayList,尽管后者也能发挥作用,或者如果您想要订单,则使用集合运算来检查两个元素中是否存在元素,或者其中一个是否是另一个元素的子集。

其他建议的方法假定组织顺序不同,没有重复,没有-betw EEN插入(A,C VS A,B,C)等

1

在你executeQuery()的方法,你可以使用下面的SQL命令:

select * from db1,db2 where db1.ruleid=db2.ruleid and db1.dataset=db2.dataset and db1.partition=db2.partition; 

那么你可以得到它们所呈现的匹配的行两个数据库。