数据库表instrument中有四个字段
1.instrID(描述仪器的ID),itemID(测向分量的ID),itemName(测向分量的名称),obsTime(观测时间)
其中obsTime是类似"20080901193001,20080901193201,20080901193201"结构的值
2.现在我想做的事是从数据库中读取一条记录,将每条记录的第四项用split(",")拆分
由于每个itemID对应的obsTime长度不一样所以我选择了用ArrayList<ArrayList<String>>,
请问这个实现语句应该怎么写呢?

解决方案 »

  1.   

    应该是我没有表达清楚
    读取后放在ArrayList<ArrayList<String>>里,然后在Struts的前台页面显示
      

  2.   

    我自己写了一个,大家看看对不对:
    Context ctx=new InitialContext(); 
    Connection conn=null; 
    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysql"); 
            conn=ds.getConnection();
            String sqlStr1 = "select count(itemID) as rscount from LoopQueryMeasureData where instrID="+instrID;
    String sqlStr2 = "select items.itemID,items.itemName,LoopQueryMeasureData.obsTime,LoopQueryMeasureData.instrID from " +"LoopQueryMeasureData,items where LoopQueryMeasureData.itemID=items.itemID and " +"LoopQueryMeasureData.instrID="+instrID;
    Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    ResultSet rs1 = stmt.executeQuery(sqlStr1);
    ResultSet rs2 = stmt.executeQuery(sqlStr2);

            ArrayList<ArrayList<String>> listReturn = new ArrayList<ArrayList<String>>();
    if(rs1.next()){
    int count = rs1.getInt(1);
    for(int i=0;i<count;i++){
    listReturn.add(new ArrayList<String>());
    }
    while(rs2.next()){
    for(int i=0;i<listReturn.size();i++){
    (listReturn.get(i)).add(rs2.getString("LoopQueryMeasureData.instrID"));
    (listReturn.get(i)).add(rs2.getString("items.itemID"));
    (listReturn.get(i)).add(rs2.getString("items.itemName"));
    String[] lackTime = rs2.getString("LoopQueryMeasureData.obsTime").split(",");
    for(int j=0;j<lackTime.length;j++){
    (listReturn.get(i)).add(lackTime[j]);
        }
      }
    }
    request.setAttribute("listReturn", listReturn);
    }
      

  3.   

    你的程序流程比较乱:1、循环结构错误,2、你应该用一个对象封装每一条数据,然后再放到list中去。
      

  4.   

    解决办法一:写一个VO类去封装.class T
    {
    instrID
    //其它的属性
    //最后一个你可以是一个数组,也可以用一个ArrayList.//对应的get/set方法
    }ArrayList list = new ArrayList();
     while(rs2.next()){
             T t = new T();
               t.setInstrID((rs2.getString("LoopQueryMeasureData.instrID"))
               t.setxxx(rs2.getString(xxx))
               t.setyyy(rs2.getString(yyy).split(","));
               list.add(t);
                    }request.setAttribute("list",list);
      

  5.   

    方法二:优化一下你自己的算法
    if(rs1.next()){
            while(rs2.next()){         ArrayList temp =new ArrayList();
              temp.add(rs2.getString("LoopQueryMeasureData.instrID"));
              temp.add(rs2.getString("items.itemID"));
              temp.add(rs2.getString("items.itemName"));
              String[] lackTime = rs2.getString("LoopQueryMeasureData.obsTime").split(",");
              for(int j=0;j<lackTime.length;j++){
                 temp.add(lackTime[j]);
                }                            
              }
              listReturn.add(temp);
            }
            request.setAttribute("listReturn", listReturn);
        }你这样做呢,在显示这个listReturn的时候,每一个元素是ArrayList,然后这个ArrayList的前三个元素是那三个属性也就是get(0),get(1),get(2),其它的就是你的时间分隔出来的了.
      

  6.   

    多谢各位指点
    我昨晚稍微改了一下,不过不是最优算法:Context ctx=new InitialContext(); 
    Connection conn=null; 
    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysql"); 
    conn=ds.getConnection();String sqlStr1 = "select count(itemID) as rscount from LoopQueryMeasureData where instrID="+instrID;
    String sqlStr2 = "select items.itemID,items.itemName,LoopQueryMeasureData.obsTime,LoopQueryMeasureData.instrID from " +
    "LoopQueryMeasureData,items where LoopQueryMeasureData.itemID=items.itemID and " +
    "LoopQueryMeasureData.instrID="+instrID;
    Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    ResultSet rs1 = stmt.executeQuery(sqlStr1);
    ArrayList<ArrayList<String>> listReturn = new ArrayList<ArrayList<String>>();

    if(rs1.next()){

    int count = rs1.getInt(1);
    for(int i=0;i<count;i++){
    listReturn.add(new ArrayList<String>());
    }
    ResultSet rs2 = stmt.executeQuery(sqlStr2);
    int i =0 ;
    while(rs2.next()){

    (listReturn.get(i)).add(rs2.getString("LoopQueryMeasureData.instrID"));
    (listReturn.get(i)).add(rs2.getString("items.itemID"));
    (listReturn.get(i)).add(rs2.getString("items.itemName"));
    String[] lackTime = rs2.getString("LoopQueryMeasureData.obsTime").split(",");

    for(int j=0;j<lackTime.length;j++){
    System.out.println(lackTime[j]);
    (listReturn.get(i)).add(lackTime[j]);
    }
    i++;   
    }
    request.setAttribute("listReturn", listReturn);
    rs2.close();
    }