2013-06-12 4 views
4

У меня есть два запроса sql, которые возвращают списки. Мой код:Как добавить элементы списка в другой список?

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

Что у меня есть: Список с двумя подсписков - подсписком из Query1 и подсписка от Query2.
Что мне нужно: Один список со всеми элементами запроса1 и query2.
Любая идея?


Проблема была в первом запросе sql. Результат добавлялся в массив объектов, поэтому метод addAll не решает мою проблему.

+3

написать запрос, который вернет SQL 'query1 UNION query2'. –

+0

'list.addAll (em.createNativeQuery (query2) .getResultList());' даст вам список из query1 и query2. Не так ли? – anubhava

+0

query1: «выберите mobile_phone, пароль, first_name, last_name из учетных записей, где mobile_phone = '" + phone + "'" query2: "выберите имя из Mails где user_id = (выберите id из учетных записей, где mobile_phone = '" + phone + "\ ')" – rustock

ответ

4

addAll() будет работать. код верный для получения данных как от запроса

+1

Если код работает, чем для того, что я создавал новую тему? – rustock

+0

один пример, что я wo uld хотел бы поделиться, что сработало для меня Список dataList = new ArrayList (); dataList.addAll (getDataList (qry1)); dataList.addAll (getDataList (qry2)); –

0

Вы на самом деле хотите, чтобы создать список списков, т.е .:

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

Вы не можете хранить как строки и списки строк в том же списке, который определяется следующим образом. Если вы действительно хотите это сделать, вы должны просто определить List<Object>, и вы сможете хранить там элементы любого типа. Однако это очень не рекомендуется. В java были введены дженерики для предотвращения такого использования во время компиляции.

Итак, что вы, вероятно, на самом деле хотите, чтобы creatate список список строк, а затем выполнять запросы, которые возвращают списки строк и добавить результат в первом списке:

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

Кстати, этот подход не рекомендуется слишком , Обычно, если вы хотите создать n-мерную коллекцию, где n> 1, вы, вероятно, должны создать еще один контейнерный класс, содержащий коллекцию и другие материалы, а затем создать одномерную коллекцию, в которой хранятся экземпляры этого класса.

+0

Нет. Я хочу создать ОДИН список без подписок. Я хочу объединить списки из два запроса к одному. – rustock

2

Я создал подобную ситуацию, чтобы проверить, что вы говорите. Очевидно, что у меня нет доступа к вашей конкретной базе данных для запроса, поэтому я просто сосредоточился на вопросе вашего вопроса; 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); 

Выход был:

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

Моя единственная мысль, почему вы не получаете, что результат будет, что один из ваших запросов будет ничего не возвращаются ... Я бы рекомендовал пытаться напечатать перед тем, как добавить их вместе, как я сделал выше, и посмотреть, пуст ли он.

+1

Попробуйте запустить отладчик и увидеть значения списка. – rustock

+0

Значения в списках при отлаживании идентичны значениям, напечатанным ... Вы получаете другой результат, запускающий мой код на вашем компьютере? – The9thPatriarch

Смежные вопросы