2016-04-06 3 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

. Я получил это. При выборе (select 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; но как указал Эрна в своем ответе выше, возвращаемый список может быть списком строк вместо массива объектов.

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