2016-04-29 5 views
2

В моем коде query работает нормально, но во время итерации он выдает эту ошибку.Как устранить исключение java.lang.ClassCastException: java.math.BigDecimal не может быть применено к [Ljava.lang.Object; в java

Мой код здесь:

Session session = null; 
try{ 
    Query qu=session.createSQLQuery("select plot_no from house_details where type='duplex'"); 
    List<Long> li = qu.list(); 
    System.out.println("---li---"+li.toString()); 
    for (Iterator itr = li.iterator(); itr.hasNext();) { 
     String plotNo = itr.next().toString(); 

     if(plotNo.equals("501") || plotNo.equals("520") || plotNo.equals("601"){ 
      System.out.println("---if---"); 
      //code here 
     } 
     else{ 
      System.out.println("---else---"); 
      Query qu1 = session.createSQLQuery("select distinct name,houseno from house_details"); 
      List li1 = qu1.list(); 
      for (Iterator itr1 = li.iterator(); itr1.hasNext();) { 
       Object[] obj = (Object[]) itr1.next(); 
       String houseName = (String) obj[0]; 
       String houseNo = (String) obj[1]; 
       System.out.println("---houseName--->"+houseName); 
      } 
    } 
}catch(Exception e){ 
    e.printStackTrace(); 

}finally { 
    if(session!=null){ 
    session.close(); 
    } 
} 

выход:

---li---[501, 0, 101, 101, 114] 
---else--- 
java.lang.ClassCastException: java.math.BigDecimal cannot be cast to [Ljava.lang.Object; 

он показывает ошибку в Object[] obj = (Object[]) itr1.next(); линии.

Что не так в моем коде?

ответ

1

Во-первых, актеры: вы обрабатываете итератор над списком li, как если бы это был итератор над списком массивов, в то время как на самом деле это итератор над списком BigDecimal. Это li1, что вы должны быть итерация:

for (Iterator itr1 = li1.iterator() ; itr1.hasNext() ;) 
//     ^

Другая ошибка происходит на ранней стадии:

List<Long> li = qu.list(); 

должно быть

List<BigDecimal> li = qu.list(); 

, потому что объекты внутри списка, возвращенного запросом имеют тип BigDecimal, что подтверждается отказом.

+0

Да, да, спасибо. – Sri

+0

Я получил ** 101 ** два раза, он идет в ** еще ** цикл также два раза, как остановить его, я хочу, чтобы только один раз было достаточно. – Sri

+0

@Sri 'select different plot_no' в первом запросе должен делать трюк. – dasblinkenlight

1

Как сказано в сообщении об ошибке: один массив BigDecimal не может быть перенесен в Object-Array. У вас неверный список перечней: li <> li1. Изменить for (Iterator itr1 = li.iterator(); itr1.hasNext();) { на (Iterator itr1 = li1.iterator(); itr1.hasNext();) {, а затем он должен работать.

+0

Да, да, спасибо. – Sri

+0

Я получил ** 101 ** два раза, он идет в ** еще ** цикл также два раза, как остановить его, я хочу, чтобы только один раз достаточно – Sri

+0

Добавьте «отличный» к вашему первому запросу. Как 'select different plot_no from ...' – Frank