2010-02-18 5 views

Répondre

11

si les deux ResultSet s proviennent de la même base de données, alors pourquoi ne pas les combiner lors de la récupération en utilisant union; par exemple.

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

Cependant, si ce n'est pas une option alors je suggère que la définition d'une classe pour représenter une ligne extraite de votre ResultSet et la mise en œuvre equals/hashCode pour permettre au à comparer l'égalité. Puis ajoutez simplement chaque à Set (par exemple HashSet) afin de supprimer les doublons.

+1

+1 ... bonne réponse ... très précise et au point ... Je voudrais vous upvote 10 fois si j'avais les droits. –

+2

UNION supprime les doublons, forçant un tri. UNION ALL concatène les ensembles de résultats de manière fonctionnelle. Si les tours sont acceptables ou si vous savez que les deux ensembles de résultats ne se chevauchent pas, utilisez UNION ALL. –

+0

@Adam: L'OP a déjà déclaré qu'il voulait que les lignes en double ne soient affichées qu'une seule fois, d'où la raison pour laquelle j'ai mentionné UNION plutôt que UNION ALL. – Adamski

3

Vous pouvez:

  1. Créer une classe qui a des propriétés correspondant aux colonnes
  2. mettre en œuvre les equals() et hashCode() méthodes utilisant les champs par lesquels vous définissez « dupliquer » (laissez votre aide IDE vous avec le génération de ceux-ci)
  3. createa un Set (HashSet):

    Set combinedDataSet = new HashSet();

  4. Itérer chaque resultSet et construire des objets:

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

    La même itération va pour rs2

Est-ce que dans le cas où vous ne pouvez pas obtenir le résultat souhaité par un Requête SQL

+0

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

+0

@Bozho Je veux communiquer avec vous. Je n'ai aucun problème de programmation que je peux poster ici. Vous avez répondu à plusieurs de mes questions et ainsi, je sais que vous êtes la bonne personne pour avoir des conseils de votre part pour ma carrière. J'ai également vérifié votre blog mais je n'ai trouvé aucun moyen de communiquer avec vous. Je ne veux pas utiliser SO pour communiquer avec vous, car ce serait faux. Je vous serais très reconnaissant si vous me donnez du temps de votre précieux temps et dites-moi comment puis-je discuter avec vous. Merci. –

+1

@Yatendra Goel si vous avez des questions particulières, demandez-les au SO. Si vous avez des questions moins spécifiques, consultez mon blog (lié dans mon profil ici) et envoyez-moi un commentaire. – Bozho

Questions connexes