String sql = "from tabfunc";
HibernateDAO dao = new HibernateDAO();
Session session = dao.getSession();
Query query = session.createQuery(sql);
List l = query.list();for (int i = 0; i < l.size(); i++) {
String[] str = (String[])l.get(i); //这是100行
for (int j = 0; j<str.length; j++){
System.out.println(str[j].toString());
}
}
运行出错了type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
com.lianchuang.unicrm.pub.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:99)
root cause java.lang.ClassCastException
com.lianchuang.unicrm.grade.report.CityIncomeKeepReportLogic.query(CityIncomeKeepReportLogic.java:100)
com.lianchuang.unicrm.grade.report.CityIncomeKeepReportAction.query(CityIncomeKeepReportAction.java:62)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
com.lianchuang.unicrm.struts.BaseAction.execute(BaseAction.java:104)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
com.lianchuang.unicrm.pub.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:99)
note The full stack trace of the root cause is available in the Tomcat logs.
HibernateDAO dao = new HibernateDAO();
Session session = dao.getSession();
Query query = session.createQuery(sql);
List l = query.list();for (int i = 0; i < l.size(); i++) {
String[] str = (String[])l.get(i); //这是100行
for (int j = 0; j<str.length; j++){
System.out.println(str[j].toString());
}
}
运行出错了type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
com.lianchuang.unicrm.pub.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:99)
root cause java.lang.ClassCastException
com.lianchuang.unicrm.grade.report.CityIncomeKeepReportLogic.query(CityIncomeKeepReportLogic.java:100)
com.lianchuang.unicrm.grade.report.CityIncomeKeepReportAction.query(CityIncomeKeepReportAction.java:62)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
com.lianchuang.unicrm.struts.BaseAction.execute(BaseAction.java:104)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
com.lianchuang.unicrm.pub.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:99)
note The full stack trace of the root cause is available in the Tomcat logs.
强制转换出了错
你先把list中每个对象输出来看看啊
System.out.println(l.get(i));
应该有不是String型的
for(int i=0;i<list.size();i++) {
Map result = (Map)list.get(i);
//然后是用个bean来读出数据
}
List.get返回的是一个map,然后呢,怎么返回前台,有例子贴一个吗?谢谢.
我们是用List.get一个个取出查询的行,然后再拼成新的List返回给前台.
你有没有更好的方式,我先把我们的代码贴出来. List l = query.list();
List lis = new ArrayList();
BigDecimal sum1 = new BigDecimal(0);
BigDecimal sum2 = new BigDecimal(0);
BigDecimal sum3 = new BigDecimal(0);
BigDecimal sum4 = new BigDecimal(0);
BigDecimal sum5 = new BigDecimal(0);
BigDecimal sum6 = new BigDecimal(0);
BigDecimal sum7 = new BigDecimal(0);
BigDecimal sum8 = new BigDecimal(0);
BigDecimal sum9 = new BigDecimal(0);
BigDecimal sum10 = new BigDecimal(0);
BigDecimal sum11 = new BigDecimal(0);
for (int i = 0; i < l.size(); i++) {
Object[] o = (Object[]) l.get(i);
Object[] t = new Object[6];
if (o[0] == null) {
t[0] = "无级别";
} else {
t[0] = o[0] = ParaDesc.getGradeName((String) o[0], dao
.getSession());
}//星级名称
t[1] = o[1];//包保用户数
t[2] = o[4];//收入
//System.out.println("o[4]====" + ((BigDecimal) o[4]).longValue());
if (o[3].equals(new BigDecimal(0))) {
t[3] = new BigDecimal(0);
} else {
t[3] = precentdiv(((Long) o[2]).longValue(), ((Long) o[3])
.longValue()); //停机率
} if (o[6].equals(new BigDecimal(0))) {
t[4] = new BigDecimal(0);
} else {
t[4] = precentdiv(((Long) o[7]).longValue(), ((Long) o[6])
.longValue()); //通话率
}
if (o[5].equals(new BigDecimal(0))) {
t[5] = new BigDecimal(0);
} else {
t[5] = precentdiv(((BigDecimal) o[8]).longValue(),
((BigDecimal) o[5]).longValue()); //欠费率
}
lis.add(t);
sum1 = sum1.add(new BigDecimal(o[1].toString()));
sum2 = sum2.add(new BigDecimal(o[2].toString()));
sum3 = sum3.add(new BigDecimal(o[3].toString()));
sum4 = sum4.add((BigDecimal) o[4]);
sum5 = sum5.add((BigDecimal) o[5]);
sum6 = sum6.add(new BigDecimal(o[6].toString()));
sum7 = sum7.add(new BigDecimal(o[7].toString()));
sum8 = sum8.add((BigDecimal) o[8]);
sum9 = sum9.add(new BigDecimal(o[9].toString()));
sum10 = sum10.add(new BigDecimal(o[10].toString()));
sum11 = sum11.add(new BigDecimal(o[11].toString()));
}
//汇总
Object[] obj = new Object[6];
obj[0] = "汇总";
obj[1] = sum1;
obj[2] = sum5;
if (sum2.equals(new BigDecimal(0))) {
obj[3] = new BigDecimal(0);
} else {
obj[3] = precentdiv(new Long(sum2.toString()).longValue(),
new Long(sum3.toString()).longValue()); //停机率
} if (new BigDecimal(sum6.toString()).equals(new BigDecimal(0))) {
obj[4] = new BigDecimal(0);
} else {
obj[4] = precentdiv(new Long(sum7.toString()).longValue(),
new Long(sum6.toString()).longValue()); //通话率
} if (sum5.equals(new BigDecimal(0))) {
obj[5] = new BigDecimal(0);
} else {
obj[5] = precentdiv(((BigDecimal) sum8).longValue(),
((BigDecimal) sum5).longValue()); //欠费率
} lis.add(obj);
String[] fields = new String[] { "星级", "用户数", "收入", "停机率", "通话率", "欠费率" };
return new Object[] { lis, fields };
各位不知道是不是碰到类似的情况.
Hibernate的hql如果写成
sql = "from TabFunc";
则直接将 HibernateDAO dao = new HibernateDAO();
Session session = dao.getSession();
String sql = createSql(form);
Query query = session.createQuery(sql);
List lis = query.list();
中的lis返回给前台,则出错将hql换个写法,其他一点也不变,就好使了 (晕,为什么???)
sql = "select a.funcid,a.funcname,a.workurl from TabFunc a";
再将lis反给前台,前台可以正常显示了