我正在使用 Spring 2.5 MVC模块,我正在使用模板从数据库中重新获取数据并返回列表...在列表中我添加了bean对象,现在当我尝试从bean对象中检索显示ClassCastException
List listLogin = LoginDao.Authenticate(username,password);
Iterator it = listLogin.iterator();
while (it.hasNext())
{
Login bean1= (Login) it.next(); //here it is showing classCastException
System.out.println(bean1.getClinicId());
}
public static List Authenticate(String userName, String password) {
List names = template.query("select clinicId from doc_user where userName='"+userName+"' and passwd='"+password+"'",
new RowMapper() {
public Object mapRow(ResultSet resultSet, int i) throws SQLException
{
ArrayList lst = new ArrayList();
Login loginBean = new Login();
loginBean.setClinicId(String.valueOf(resultSet.getInt(1)));
lst.add(loginBean);
return lst;
}
});
return names;
}
答案 0 :(得分:2)
那是因为返回的(Login) it.next()
不是Login
对象。你可以使用调试器和步骤槽,看看它返回什么,或者做穷人的版本并将其打印出来,看看它的回归:
while (it.hasNext())
{
Object bean1= it.next();
System.out.println(bean1.getClass().getName());
}
根据您的评论进行更新:
您知道这是返回一个包含登录对象列表的列表:
while (it.hasNext())
{
List list1 = (List)it.next();
for (Object bean : list1) {
System.out.println(((Login)bean).getClinicId());
}
}
我会说我认为你做错了,你的查询应该只是返回一个登录列表开始。因为看起来父列表中的ArrayList只包含一个对象所以你可能会这样做:
public static List Authenticate(String userName, String password) {
List names = template.query("select clinicId from doc_user where userName='"+userName+"' and passwd='"+password+"'",
new RowMapper() {
public Object mapRow(ResultSet resultSet, int i) throws SQLException
{
Login loginBean = new Login();
loginBean.setClinicId(String.valueOf(resultSet.getInt(1)));
return loginBean ;
}
});
return names;
}
然后使用您最初认为可行的代码处理它们:
List listLogin = LoginDao.Authenticate(username,password);
Iterator it = listLogin.iterator();
while (it.hasNext()) {
Login bean1= (Login) it.next();
System.out.println(bean1.getClinicId());
}