2010-11-08 18 views
8

Java'da yeni ve veri listesinden veri gösterme konusunda sorun yaşıyorum. Birden fazla tablo arasında veri toplamak ve benim denetleyicisi durumuna dönmelidir basit bir yöntem var:Listeden veriler nasıl alınır <Object> (Java)?

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;} 

Şimdi denetleyicisi bu verileri almak istiyor, fakat benim tek sonuç almak için nasıl bilmiyorum liste. Böyle bir şey yapmaya çalıştık:

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

ama I `bu nesnelere sadece referanslar elde (örneğin [Ljava.lang.Object için; @ 167a47b). Ayrıca Iterator kullanmayı denedim, ancak sonuç aynı. Böyle bir kod kullanmaya çalıştı:

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

ama çok bana yardımcı neyse ve gözü t - bu derleme hatası ile sona erer.

Birisi bana bu listeden bir 'id' (tamsayı değeri) nasıl ulaşılacağını söyleyebilir mi? Böyle bir koda sahip benim 'Görünüm' in MyFaces (houseControll Bean Yönetilen benim JSF adıdır - kontrolör) kullanılarak I `:

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

bu kod Bir 'kimlik' değerini düzgün gösterilene - 1,2,3 değerine sahibim. Kontrol cihazımda aynı sonucu nasıl alabilirim? Veri denetleyicide nasıl yazdırılır?

cevap

0
System.out.println("Element "+i+list.get(0));} 

System.out.println("Element "+i+list.get(i));} 

MTU etiketlerini kullanmak için gelmesi halinde DataList değeri elemanlarının listenize bir referans niteliği vermek ve var niteliği listenin her elemanı için yerel bir isimdir sırayla. DataList İçinde, çıkışa nesne (getters) özelliklerini tek tek nesne hakkında bilgi kullanın:

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

Bu

List xx= (List) list.get(0) 
String id = (String) xx.get(0) 

gibi bir şey deneyin ya gerektiğini bir Ev değer nesnesi varsa sorgunun sonucu

düzgün sonuç listesinde yineleme değil başlayanlar için
House myhouse = (House) list.get(0); 
13

, i hiç endeksi kullanmıyorsanız sonra, aynı tiptedir. Böyle bir şey deneyin:

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

sorgu nesneleri Diziler Listesini reutrns gibi Diziler önce bir döküm yapmak gerekir toString geçersiz kılmak ve sonra() Arrays.toString kullanmak uygun nesneler değildir, çünkü görünüyor.

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

Yanıtlarınız için teşekkürler. İyi bir çözüm 'beyin' yöntemini kullanmaktı:

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

Sorun çözüldü. Tekrar teşekkürler.Bu

List<Object[]> list = HQL.list(); // get your lsit here but in Object array 

Sorgunuzun gibi

+0

Eğer mutluysan, cevabını kabul et. – GaryF

3

yapın şudur: "houses.id, addresses.country, addresses.region SEÇ, ..."

for(Object[] obj : list){ 
String houseId = String.valueOf(obj[0]); // houseId is at first place in your query 
String country = String.valueof(obj[1]); // country is at second and so on.... 
....... 
} 

karışık olsun bu şekilde nesneler kolaylıkla, ama hangi noktada hangi değeri aldığınızı önceden bilmeniz gerekir ya da bilmeniz gereken değerleri yazdırabilirsiniz. Kötü ingilizce için özür dilerim umarım bu yardımcı olurum.

İlgili konular