2014-03-07 66 views
1

我想合併來自2個結果集的結果,這些結果是從sql查詢返回的結果。什麼是完成這個最好的方法?結果集中的嵌套while循環

我的計劃是打破2個結果集,打印出兩個結果集的最終結果。兩個結果集都有相同的id列,這是他們的第一列。但是對於內部while循環,我只能打印出第一個值。

我認爲當有匹配時,它打印第二個結果集的值,並跳出循環。然後當有另一個匹配時,它再次打印出該值。

while (set1.next()) 
{ 
    System.out.print("Id: "+set1.getInt(1)+", Name: "+set1.getString(2)); 

    while (set2.next()) 
    { 
     if (set1.getInt(1)==(set2.getInt(1))) 
     { 
      System.out.print(", Alias: "+set2.getString(2); 
      break; 
     } 
    } 

    System.out.println(); 
} 

編輯:

ResultSet set1: 
id | name 
1 | A 
2 | B 
3 | C 
... 

ResultSet set2: 
id | alias 
1 | F 
2 | G 
2 | H 

我想打印出來:

Id: 1, Name: A, Alias: F 
Id: 2, Name: B, Alias: G, H 

僅供參考,id爲升序訂單兩套

+1

你介意發佈一些數據和查詢的樣本嗎? – Leo

+0

我剛剛發佈了一些更多的信息。謝謝 – kaboom

+0

什麼是'set1'和'set2'。什麼數據類型? – mrres1

回答

0

由於兩個結果集具有相同的第一列(id),因此可以從兩個結果集的第一行開始。在內部循環中,遍歷set2中的行,直到它的id比set1中的id更大。所以你可以這樣做:

while (set1.next()) 
{ 
    System.out.print("Id: "+set1.getInt(1)+", Name: "+set1.getString(2)); 

    while (set2.next()) 
    { 
     System.out.print(", Alias:"); 
     if (set1.getInt(1)==(set2.getInt(1))) 
     { 
      System.out.print(set2.getString(2) + ", "); 
      continue; 
     } else { 
      set2.previous(); 
      break; 
     } 
    } 
    System.out.println(); 
} 
+0

這是個好主意。但我不能這樣做,因爲set2中的id不是唯一的。所以一個'名稱'可以有多個'別名' – kaboom

+0

好的,如果set2的id不是唯一的,那麼看到我更新的答案。 – tonga

+0

謝謝。它實際上表示該操作不支持僅向前結果集。有沒有更好的方法來合併來自2個結果集的結果?我認爲PPL經常在SQL查詢中使用UNION。但是我不能使用UNION,因爲返回的行有不同的字段('Name'和'Alias') – kaboom

1

下面的循環將只執行一次用於外環

 while (set2.next()){ 
      if (set1.getInt(1)==(set2.getInt(1))){ 
       System.out.print(", Alias: "+set2.getString(2); 
       break; 
      } 
     } 

您需要在每次外循環執行時重新初始化您的迭代器。

+0

對不起,你可以詳細說明重新初始化迭代器嗎?我對java很陌生 – kaboom

+0

你必須在代碼中初始化set2嗎?像迭代器 set2 = yourSet.iterator()。您必須在inner while循環之前執行此操作。 –

+0

我加了迭代器 set2_itr = set2.iterator()。它說沒有iterator()方法。我確實導入了java.util。*,但是 – kaboom