我在java代码中控制两个查询,将第一个查询返回的结果集,在第二个查询中用for循环做为条件查询,代码:
/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.gdkj.action;import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;import com.gdkj.entity.Device;
import com.gdkj.entity.DeviceDAO;
import com.gdkj.entity.Realrun;
import com.gdkj.entity.RealrunDAO;
public class runallinfolist extends Action{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
try 
{
request.setCharacterEncoding("utf-8");
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
Date today=Calendar.getInstance(Locale.CHINA).getTime();
String strDate=format.format(today);

List device = new DeviceDAO().findAll();
List devicelist = new ArrayList();
for (int i = 0; i<device.size(); i++)
{

Object deviceshow[] = new Object[2]; 
deviceshow[0] = ((Device)device.get(i)).getFzaddr();
deviceshow[1] = ((Device)device.get(i)).getNodeAddr();
devicelist.add(deviceshow);

for (int ico = 0; ico<devicelist.size(); ico++)
{
List runlist = new RealrunDAO().findalldata(deviceshow[0],deviceshow[1]);
List tmp_List = new ArrayList();
 
for(int icount = 0; icount < runlist.size(); icount++)
{
Object temp_Object[] = new Object[18];
temp_Object[0] = ((Realrun)runlist.get(icount)).getId().getAddress();
temp_Object[1] = ((Realrun)runlist.get(icount)).getId().getDeviceId();
temp_Object[2] = ((Realrun)runlist.get(icount)).getId().getLineName();
temp_Object[3] = ((Realrun)runlist.get(icount)).getId().getData();
temp_Object[4] = ((Realrun)runlist.get(icount)).getId().getUab();
temp_Object[5] = ((Realrun)runlist.get(icount)).getId().getUca();
temp_Object[6] = ((Realrun)runlist.get(icount)).getId().getUbc();
temp_Object[7] = ((Realrun)runlist.get(icount)).getId().getU0();
temp_Object[8] = ((Realrun)runlist.get(icount)).getId().getIa();
temp_Object[9] = ((Realrun)runlist.get(icount)).getId().getIb();
temp_Object[10] = ((Realrun)runlist.get(icount)).getId().getIc();
temp_Object[11] = ((Realrun)runlist.get(icount)).getId().getI0();
temp_Object[12] = ((Realrun)runlist.get(icount)).getId().getP();
temp_Object[13] = ((Realrun)runlist.get(icount)).getId().getQ();
temp_Object[14] = ((Realrun)runlist.get(icount)).getId().getCos();
temp_Object[15] = ((Realrun)runlist.get(icount)).getId().getF();
temp_Object[16] = ((Realrun)runlist.get(icount)).getId().getRx();
temp_Object[17] = ((Realrun)runlist.get(icount)).getId().getTemp0();
tmp_List.add(temp_Object);
}
request.setAttribute("info", "info");
request.setAttribute("runshowlist", tmp_List);
  }
}
return mapping.findForward("allrunshow");  
}
  catch (UnsupportedEncodingException e) {
return mapping.findForward("err");
}
}
}
现在运行提示错误:
2009-11-14 8:05:41 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.gdkj.entity.Device
at com.gdkj.action.runallinfolist.execute(runallinfolist.java:43)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
是哪错了啊?

解决方案 »

  1.   

      deviceshow[0] = ((Device)device.get(i)).getFzaddr();  这个类型转换出错了。
      

  2.   

    跟踪了,
    到 deviceshow[1] = ((Device)device.get(i)).getNodeAddr();这一行就出错误了。不知道怎么回事
      

  3.   

    那应该怎么写啊?数据库里的Fzaddr和NodeAddr都是int类型。
    应该怎么写啊?
      

  4.   

    是List和Object[]之间类型错了么?
    我不太明白啊。怎么转换的
      

  5.   

     deviceshow[1] = ((Device)device.get(i)).getNodeAddr();
    device.get(i)这个事Object[]类型,你却要将它转换为Device类型,所以出错啦。
    看看你的dao中是怎么写的