在我的代码中query
工作正常,但在迭代时会抛出此错误。
我的代码在这里:
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();
行中的错误。
我的代码有什么问题?
答案 0 :(得分:1)
正如错误所示:单个BigDecimal无法强制转换为Object-Array。
你有错误的列表来迭代:li&lt;&gt; LI1。
将for (Iterator itr1 = li.iterator(); itr1.hasNext();) {
更改为(Iterator itr1 = li1.iterator(); itr1.hasNext();) {
然后它应该有效。
答案 1 :(得分:1)
首先,强制转换:您正在处理列表li
上的迭代器,就好像它是一个数组列表上的迭代器,而实际上它是BigDecimal
列表上的迭代器。你应该迭代它是li1
:
for (Iterator itr1 = li1.iterator() ; itr1.hasNext() ; )
// ^
早期发生了另一个错误:
List<Long> li = qu.list();
应该是
List<BigDecimal> li = qu.list();
因为查询返回的列表中的对象属于BigDecimal
类型,由失败的强制转换确认。