2016-04-29 4 views
2

In meinem Code query funktioniert gut, aber zum Zeitpunkt der Iteration wirft es diesen Fehler.So lösen Sie die Ausnahme aus java.lang.ClassCastException: java.math.BigDecimal kann nicht in [Ljava.lang.Object; in Java

Mein Code hier:

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

Ausgang:

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

es zeigt Fehler in Object[] obj = (Object[]) itr1.next(); Linie.

Was ist falsch in meinem Code?

Antwort

1

Zuerst die Umwandlung: Sie behandeln einen Iterator über die Liste li, als wäre es ein Iterator über einer Liste von Arrays, während es tatsächlich ein Iterator über eine Liste von BigDecimal s ist. Es ist li1, die Sie iteriert werden soll:

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

Ein weiterer Fehler tritt früh auf:

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

es

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

weil Objekte in der Liste, indem Sie Ihre Abfrage zurückgegeben werden sollte vom Typ sind BigDecimal, wie durch die fehlerhafte Besetzung bestätigt.

+0

Ja ja okay danke. – Sri

+0

ich habe ** 101 ** zwei mal, es geht in ** sonst ** schleife auch zwei mal, wie man es stoppt ich will nur einmal genug ist. – Sri

+0

@Sri 'Select distinct Plot_no' in der ersten Abfrage sollte dann den Trick tun. – dasblinkenlight

1

Wie der Fehler sagt: ein einzelnes BigDecimal kann nicht in ein Object-Array umgewandelt werden. Sie haben die falsche Liste zu iterieren: li <> li1. Ändern Sie for (Iterator itr1 = li.iterator(); itr1.hasNext();) { für (Iterator itr1 = li1.iterator(); itr1.hasNext();) { und dann sollte es funktionieren.

+0

Ja ja okay danke. – Sri

+0

ich habe ** 101 ** zwei mal, es geht in ** sonst ** schleife auch zwei mal, wie man es stoppt ich will nur einmal genug ist – Sri

+0

Fügen Sie ein "distinct" zu Ihrer ersten Abfrage hinzu. Wie 'wählen Sie distinct plot_no aus ...' – Frank

Verwandte Themen