我是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;}现在我想在控制器中获取这些数据,但我不知道如何从列表中获取单个结果。我试着这样做:
List<Object> list = getHouseInfo();
for (int i=0; i<list.size; i++){
System.out.println("Element "+i+list.get(0));}但是我只得到了对这个对象的引用(例如[Ljava.lang.Object;@167a47b])。我也尝试使用Iterator,但结果是一样的。我试着使用这样的代码:
List<Object> list = getHouseInfo();
for (int i=0; i<list.size; i++){
System.out.println("Element "+i+list.get(0)[0]);}但它对我也没有帮助--它以一个编译错误结束。
谁能告诉我如何从这个列表中获取一个‘id’(整数值)?我在我的“视图”中使用了MyFaces,其中的代码如下(houseControll是我的JSF托管Bean -控制器的名称):
<t:dataList id="myDataList" value="#{houseControll.fullOffer}" var="element" rows="3" >
...
<t:outputText id="houseId" value="#{element[0]}"/>
...
</t:dataList>这段代码正确地显示了一个'id‘值-我有1,2,3,...值。我怎样才能在我的控制器中得到相同的结果?如何打印控制器中的数据?
发布于 2010-11-08 19:21:03
对于初学者来说,您没有正确地迭代结果列表,您根本没有使用索引i。尝试如下所示:
List<Object> list = getHouseInfo();
for (int i=0; i<list.size; i++){
System.out.println("Element "+i+list.get(i));
}查询看起来像是返回了一个对象数组列表,因为数组不是覆盖toString的合适对象,您需要首先进行强制转换,然后使用Arrays.toString()。
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));
}发布于 2014-05-13 16:56:44
像这样做
List<Object[]> list = HQL.list(); // get your lsit here but in Object array您的查询是:"SELECT houses.id,addresses.country,addresses.region,...“
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....
.......
}这样你就可以很容易地得到混合的对象,但你应该提前知道你在哪个地方得到了什么值,或者你可以通过打印这些值来检查。很抱歉我的英语不好,希望这能有所帮助。
发布于 2010-11-08 19:45:27
感谢所有人的回复。一个好的解决方案是使用'brain`s‘方法:
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));
}问题解决了。再次感谢。
https://stackoverflow.com/questions/4123299
复制相似问题