我通过查询获取值,然后我尝试迭代值但是抛出错误
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();) {
Object[] obj = (Object[]) itr.next();
String plotNo = (String) obj[0];
if(plotNo=="501" || plotNo== "520" || plotNo== "601"){
System.out.println("---if---");
//code here
}
else{
System.out.println("---else---");
//code here
}
}
}catch(Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.close();
}
}
输出:
---li---[501, 0, 101, 101, 114]
java.lang.ClassCastException: java.math.BigDecimal cannot be cast to [Ljava.lang.Object;
我的代码有什么问题。获取此行时出错
Object[] obj = (Object[]) itr.next();
String plotNo = (String) obj[0];
答案 0 :(得分:3)
对itr.next
的调用会返回BigDecimal
,而不是Object[]
。您正在尝试将其转换为Object[]
:
Object[] obj = (Object[]) itr.next();
String plotNo = (String) obj[0];
您获得ClassCastException
,因为它不是Object[]
。
用这一行替换上面的两行:
String plotNo = itr.next().toString();
答案 1 :(得分:1)
Object[] obj = (Object[]) itr.next();
String testName = (String) obj[0];
您希望java能够理解您想要做的事情。通常情况确实如此,文档中对此进行了描述。实际上,当另一个方法获得字符串作为arg时,调用方法toString()。在你的情况下,你期望在拆箱和装箱方面有类似的东西(对于Object类来说只是这样)。并且不会调用方法toString()。
尝试使用 方法toString()显式存在于Object类中,所有类都继承此方法。它适用于这种情况。
String testName = obj[0].toString();
答案 2 :(得分:0)
尝试使用
String testName = obj[0].toString();
此致 马赫什