2016-04-06 75 views
1

這裏是我的代碼 -每個迴路不工作

StringBuffer queryString = new StringBuffer(); 
    queryString.append("select m.user_message "); 
    queryString.append("from message m"); 
    Query query = entityManager.createNativeQuery(queryString.toString()); 

    List<Object[]> results = query.getResultList(); 
    System.out.println(results); 
    for (Object[] result : results) { 
     System.out.println(result); 
    } 

它輸出「的System.out.println(結果);」正確的答案,但不進入每個循環。 這裏的錯誤是: -

java.lang.String cannot be cast to [Ljava.lang.Object; 
+0

嘗試(字符串結果:結果){ – SeeuD1

+0

請不要使用StringBuffer,因爲十多年前它被StringBuilder所取代。 –

回答

4

基於異常你有,看起來像query.getResultList()返回List<String>,而不是List<Object[]>。更改你的代碼

List<String> results = query.getResultList(); 
System.out.println(results); 
for (String result : results) { 
    System.out.println(result); 
} 
+0

。我得到了這個..當選擇(選擇m.id)它返回字符串,當選擇兩個或更多(選擇m.id,m.message)時,它返回對象..謝謝.. –

+0

從該方法的文檔:「查詢執行將導致SQL結果的每一行都作爲Object []類型的結果返回(或者如果選擇列表中只有一列,則返回Object類型的結果)。「 – chrylis

1

要打印的陣列錯誤

做,而不是:

for (Object[] result : results) { 
     for (Object obj : result) { 
     System.out.println(obj); 
    } 
} 

甚至更​​好

for (Object[] result : results) { 
      Arrays.toString(result)); 
    } 
+0

不,我已經告訴過它並不是每個人都會進入.. –

0

您可以驗證有返回的列表內的結果通過改變System.out.println(results);成類似System.out.println(results ==null ? "empty", results.size());

對我來說,似乎是進入,因爲報告的異常的循環java.lang.String cannot be cast to [Ljava.lang.Object;但Erna在上面的回答中指出,返回的列表可能是字符串列表而不是對象數組。