2013-03-03 16 views
5

2つのテーブルがあります。また、これらの表には、userid、usernameという同じスキーマがあります。私がチェックしたいのは、usernametable1table2です。Javaの2つの結果セットの値を比較する方法

rs1 = statement.executeQuery("select username from table1") 
rs2 = statement.executeQuery("select username from table2") 

私のロジックです:

  • while(rs1.next())
  • rs2のすべての値をrs1の値を比較します。
  • If値がelseのいずれかの値が一致するものが見つかりました。両方の値を印刷します。誰も私を助けてください

Javaでこれを実現する方法はあります... ...おかげで...

答えて

4

私は、単一のSQL文を使用します:

select table1.username from table1, table2 where table1.username = table2.username 

この意志を両方のテーブルに表示されるユーザー名のみを返すので、後処理は不要です。

この構造体はinner joinと呼ばれます。 table1および/またはtable2に固有のユーザー名も識別する場合は、outer joinを使用できます。

0

はい、Javaでこれを行う方法があります。あなたが提案するロジックはうまくいくでしょう、それはO(n^2)です。これはあまり良くありません。たとえば、O(n log n)、さらにはO(n)のように、全体的なパフォーマンスが向上するように、アクセス時間がO(n)未満のセット内の1つのrsから名前を付けることができます。たぶんHashSetまたはTreeSet

データが別々のデータベースにない限り、最初はクエリを変更する方が良いでしょう。

これまでの投稿を参考にしてください。スタックオーバーフローは実際にはcode xyz for me, for freeサービスではありません。

0

擬似コード:

if (A.type = B.type) 
{ 
    PRINT same type 

    if (A.format = B.format) 
    { 
     PRINT same format 

     if (A.value = B.value) 
     { 
      PRINT same value 
     } 
     else 
     { 
      PRINT different value 
     } 
    } 
    else 
    { 
     PRINT different format 
    } 
} 
else 
{ 
    PRINT different type 
} 
0

あなたはSQL文のINとNOT INを通じてそれを解決するか、またはあなたがこのような何か試すことができます。

public boolean compareResultSets(ResultSet resultSet1, ResultSet resultSet2) throws SQLException{ 
     while (resultSet1.next()) { 
      resultSet2.next(); 
      ResultSetMetaData resultSetMetaData = resultSet1.getMetaData(); 
      int count = resultSetMetaData.getColumnCount(); 
      for (int i = 1; i <= count; i++) { 
       if (!resultSet1.getObject(i).equals(resultSet2.getObject(i))) { 
        return false; 
       } 
      } 
     } 
     return true; 
    } 
0
I am giving an example to solve this: 

rs1 = statement.executeQuery("select username from table1") 
rs2 = statement.executeQuery("select username from table2") 

while(rs1.next()){ 
// Compare till rs1 reach to it's last record. 
    while(rs2.next()){ 
    if(){ 
     // Do your code here... 
    } 
    } 

// this will move resultSet cursor to first position. 
rs2.first(); 
} 
関連する問題