2013-06-12 2 views
4

J'ai deux requêtes sql, qui retourne des listes. Mon code:Comment ajouter des éléments de liste à une autre liste?

List<String> list = em.createNativeQuery(query1).getResultList(); 
list.addAll(em.createNativeQuery(query2).getResultList()); 

Ce que je: Liste avec deux sous-listes - sublist de query1 et de sublist query2. Ce dont j'ai besoin: Une liste avec tous les éléments de query1 et query2.
Une idée?


Le problème était dans la première requête sql. Le résultat ajoutait dans le tableau d'objet, donc la méthode addAll ne résout pas mon problème.

+3

écrire une requête qui retournera SQL 'query1 UNION query2'. –

+0

'list.addAll (em.createNativeQuery (query2) .getResultList());' vous donnera la liste de query1 et query2. N'est-ce pas? – anubhava

+0

query1: "sélectionnez mobile_phone, mot de passe, prénom, nom de famille de Comptes où mobile_phone = '" + téléphone + "'" query2: "sélectionnez le nom de Mails où ID_utilisateur = (sélectionnez l'ID de Comptes où mobile_phone = '" + téléphone + "\") " – rustock

Répondre

4

addAll() fonctionnera. code est correct pour obtenir des données à la fois de la requête

+1

Si le code est travaillé, que pour ce que je créais le nouveau sujet? – rustock

+0

un exemple que je wo Je voudrais partager qui a fonctionné pour moi Liste dataList = new ArrayList (); dataList.addAll (getDataList (qry1)); dataList.addAll (getDataList (qry2)); –

0

Vous voulez vraiment créer une liste de listes, i.e. .:

List<List<String>> listOfLists = ...;

Vous ne pouvez pas stocker les chaînes et les listes de chaînes dans la même liste définie de cette façon. Si vous voulez vraiment faire cela, vous devez simplement définir List<Object> et vous pourrez y stocker des éléments de n'importe quel type. Cependant, il est fortement déconseillé. Des génériques ont été introduits dans Java pour empêcher une telle utilisation au moment de la compilation.

Alors, que vous avez probablement vraiment envie est de creatate liste de la liste des chaînes, puis effectuer des requêtes qui renvoient des listes de chaînes et ajouter résultat à la première liste:

List<List<String>> list = new LinkedList<List<String>>(); 
list.addAll(em.createNativeQuery(query1).getResultList()); 
list.addAll(em.createNativeQuery(query1).getResultList()); 

BTW cette approche est pas trop recommandé . Généralement, si vous voulez créer une collection n-dimensionnelle où n> 1, vous devez probablement créer une autre classe de conteneur contenant des collections et d'autres éléments, puis créer une collection unidimensionnelle qui stocke les instances de cette classe.

+0

Non, je veux créer une liste sans sous-listes. deux requêtes à un. – rustock

2

J'ai créé une situation similaire pour tester ce que vous disiez. Évidemment, je n'ai pas accès à votre base de données spécifique à interroger, alors je me suis concentré sur le point de votre question; la combinaison List.

List<String> foods = new ArrayList<String>(); //this is analogous with the list returned from your first query 
foods.add("Beef"); 
foods.add("Chicken"); 
System.out.println("foods(query1): "+foods); 

List<String> fruits = new ArrayList<String>(); //this is analogous with the list returned from your second query 
fruits.add("Apple"); 
fruits.add("Peach"); 
fruits.add("Pear"); 
System.out.println("fruits(query2): "+fruits); 


foods.addAll(fruits); //this combines the two lists (your two queries) 
System.out.println("foods(after combination of queries): "+foods); 

La sortie est:

foods(query1): [Beef, Chicken] 
fruits(query2): [Apple, Peach, Pear] 
foods(after combination of queries): [Beef, Chicken, Apple, Peach, Pear] 

Ma seule pensée pourquoi vous n'êtes pas obtenir ce résultat serait que l'un de vos requêtes est rien retour ... Je recommande d'essayer d'imprimer chaque liste avant de les ajouter ensemble comme je l'ai fait ci-dessus et voir si l'un est vide.

+1

Essayez de lancer avec le débogueur et voir sur les valeurs de la liste. – rustock

+0

Les valeurs sur les listes dans le débogage sont identiques aux valeurs imprimées ... Obtenez-vous un résultat différent exécutant mon code sur votre machine? – The9thPatriarch

Questions connexes