2010-02-18 21 views

Odpowiedz

11

jeśli dwa ResultSet s pochodzą z tej samej bazy danych, to dlaczego nie połączyć ich podczas pobierania za pomocą union; na przykład

select A, B 
from C 
union 
select A, B 
from D 

Jednakże, jeśli nie jest to opcja to radzę definiowania klasy do reprezentowania rzędu wyodrębnione z ResultSet i wdrażaniu equals/hashCode aby umożliwić być równości porównywane. Następnie po prostu dodaj każde do Set (np. HashSet) w celu usunięcia duplikatów.

+1

+1 ... świetna odpowiedź ... bardzo precyzyjna i na temat ... Chciałbym ci głosować 10 razy, gdybym miał prawa. –

+2

UNION usuwa duplikaty, wymuszając sortowanie. UNION ALL funkcjonalnie łączy zestawy wyników. Jeśli dupki są akceptowalne lub wiesz, że dwa zestawy wyników nie pokrywają się, użyj UNION ALL. –

+0

@Adam: PO już oświadczył, że chce, aby podwójne wiersze były pokazywane tylko raz, stąd dlaczego wspomniałem UNION zamiast UNION ALL. – Adamski

3

Można:

  1. utworzyć klasę, która ma właściwości odpowiadające kolumn
  2. wdrożenia equals() i hashCode() metod z wykorzystaniem pól przez które definiują „duplikat” (niech IDE pomóc w generowanie z nich)
  3. createa Set (HashSet)

    Zestaw combinedDataSet = nowy HashSet();

  4. iteracyjne każdy resultSet i skonstruować obiekty:

    while (rs1.next) { 
        YourClass obj = new YourClass(); 
        obj.setSomeProperty(rs.getString(1)); 
        obj.setAnotherProperty(rs.getString(2)); 
        // etc.. 
        cominbedDataSet.add(obj); 
    } 
    

    To samo tyczy się iteracja rs2

Czy ta tylko w przypadku nie można uzyskać pożądany efekt poprzez Zapytanie SQL!

+0

+1 ... .......... :) –

+0

@Bhoho Chcę się z Tobą skontaktować. Nie mam żadnych problemów z programowaniem, które mogę opublikować tutaj. Odpowiedziałeś na różne moje pytania, a zatem wiem, że jesteś odpowiednią osobą, aby otrzymać poradę od mojej kariery. Sprawdziłem też Twojego bloga, ale nie znalazłem sposobu, by się z Tobą skontaktować. Nie chcę używać SO do komunikowania się z Tobą, ponieważ byłoby to złe. Byłbym ci bardzo wdzięczny, gdybyś poświęcił mi trochę czasu ze swojego cennego czasu i powiedział mi, jak mogę z tobą porozmawiać. Dzięki. –

+1

@Yatendra Goel, jeśli masz jakieś pytania, zapytaj ich w SO. Jeśli masz mniej szczegółowe pytania, sprawdź mojego bloga (tutaj link do mojego profilu) i wyślij mi komentarz. – Bozho