Jak pozyskać dane z List<Object>?

0

Witam wszystkich,
Mam kod pobierający dane z różnych tabel i zwracający wynik w postaci listy obiektów:

 
 public List<Object> getHouseInfo(){  
 Query q = em.createNativeQuery("SELECT houses.id, addresses.country, addresses.region, house_details.rooms, house_details.square FROM houses, addresses, house_details");  
 List<Object> myList = q.getResultList();  
 return myList;   
 }   

Teraz chciałbym pozyskać te dane i wyświetlić je w moim kontrolerze. Próbowałem w następujący sposób:

 
 List<Object> list = getHouseInfo();  
 for (int i=0; i<list.size; i++){  
 System.out.println("Element "+i+list.get(0));  
 }  

Jednakże w ten sposób otrzymuję jedynie referencje do obiektów z listy (np. [Ljava.lang.Object;@167a47b). Próbowałem używać iteratora a także następującego kodu:

 
 List<Object> list = getHouseInfo();  
 for (int i=0; i<list.size; i++){  
 System.out.println("Element "+i+list.get(0)[0]);  
 }

Niestety kończy się to błędem kompilacji.
W aplikacji używam również MyFaces gdzie mam następujący kod (houseControll to nazwa mojego kontrolera a full offer metoda zwracająca listę obiektów):

 <t:dataList id="myDataList" value="#{houseControll.fullOffer}" var="element" rows="3" >  
 ...  
 <t:outputText id="houseId" value="#{element[0]}"/>  
 ...  
 </t:dataList> 
 

W tym wypadku otrzymuję poprawne wartości 'id' - 1,2,3... Jak zatem dostać się do tych wartości w kontrolerze? Jak pozyskać z listy obiektów (List<Object>) konkretne wartości elementów?

0
charles5300 napisał(a)

Witam wszystkich,
Mam kod pobierający dane z różnych tabel i zwracający wynik w postaci listy obiektów:

public List<Object> getHouseInfo(){
Query q = em.createNativeQuery("SELECT houses.id, addresses.country, addresses.region, house_details.rooms, house_details.square FROM houses, addresses, house_details");
List<Object> myList = q.getResultList();
return myList;
}

> 
> Teraz chciałbym pozyskać te dane i wyświetlić je w moim kontrolerze. Próbowałem w następujący sposób:
> <code> 
 List<Object> list = getHouseInfo();  
 for (int i=0; i<list.size; i++){  
 System.out.println("Element "+i+list.get(0));  
 }  

Jednakże w ten sposób otrzymuję jedynie referencje do obiektów z listy (np. [Ljava.lang.Object;@167a47b). Próbowałem używać iteratora a także następującego kodu:

List<Object> list = getHouseInfo();
for (int i=0; i<list.size; i++){
System.out.println("Element "+i+list.get(0)[0]);
}

> 
> Niestety kończy się to błędem kompilacji. 
> W aplikacji używam również MyFaces gdzie mam następujący kod (houseControll to nazwa mojego kontrolera a full offer metoda zwracająca listę obiektów):
> 
> <code>
 <t:dataList id="myDataList" value="#{houseControll.fullOffer}" var="element" rows="3" >  
 ...  
 <t:outputText id="houseId" value="#{element[0]}"/>  
 ...  
 </t:dataList> 
 

W tym wypadku otrzymuję poprawne wartości 'id' - 1,2,3... Jak zatem dostać się do tych wartości w kontrolerze? Jak pozyskać z listy obiektów (List<Object>) konkretne wartości elementów?

0

A co daje list.get(0).length?

EDIT:
Oj sorry. To będzie:

((Object[])list.get(0)).length

Potrzebne jest jeszcze rzutowanie.

http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#toString()
http://download.oracle.com/javase/6/docs/api/java/lang/Class.html#getName()
Poczytaj sobie co oznacza wartość zwracana z nieprzeładowanej metody toString()

0

Czy zdajesz sobie sprawę, że zapytanie

SELECT houses.id, addresses.country, addresses.region, house_details.rooms, house_details.square FROM houses, addresses, house_details

zwróci wszystkie możliwe kombinacje tabel houses, addresses i house_details?
(czyli jeżeli miałem w każdej z nich 1000 rekordów, to zwróci ono 1000000000 wyników)

Radzę stworzyć odpowiedni model encji i używać zwykłych Quary, nie NativeQuery.

1 użytkowników online, w tym zalogowanych: 0, gości: 1