要给一批设备建立资料卡片档案,卡片大概有10多种,每个设备都有若干卡片但又不尽相同;为了能够维护这些卡片,把卡片字段做成动态的,用一个表存储字段名称;用一个表存储所有字段值。
关键情况是有的卡片是单条记录,如设备名称、编号等,有的卡片却记录多条,如按日期的检验情况。我都把他们的值存在一个数据表里。
数据表大致如下:
设备:equipTable(eid,equipname,equiptype)
卡片:cardTable(cardid,cardname)
设备卡片:equipCard(ecid,eid,cardid)
 1 1 checkequip
卡片字段:cardField(fid,cardid,fieldname)
 1 1 checkdate
 2 1 checkman
 3 1 checkresult
字段值表:fieldValue(fvid,fid,fvalue)
 1 1 "2005-01-01"
 1 2 "tom"
 1 3 "ok"
 2 1 "2005-01-02"
 2 2 "jack"
 2 3 "ok"
相关sql语句(已知参数为eid和cardid):
得到设备:select * from equipTable where eid=:eid
得到设备所有卡片:select cardTable.* from cardTable,equipCard where cardTable=equipCard and equipCard.eid=:eid
得到当前卡片字段:select * from cardField where cardid=:cardid
得到当前字段值:select * from fieldValue where fid in (select ecid from cardField where cardid=:cardid)
最后一条语句执行得到的结果跟前面字段值表:fieldValue存储的结构基本相同,在输出时想做成同一条记录横向循环,但是存在一个潜在的可能,如果卡片字段在某天增加一个字段,得到的数据条数可能前后不一致。
我尝试写的代码如下:
          HashMap map = new HashMap(),map2;
          int fvid = 0;
          while (rs.next()) {
            fvid = rs.getInt("fvid");
            map2 = new HashMap();
            map.put("fvid", String.valueOf(fvid));
            for(int i=1;i<size;i++){
              if(fvid!=rs.getInt("fvid")) break;
              map2.put(rs.getString("fid"),rs.getString("fvalue"));
              rs.next();
            }
            map.put("value",map2);
            list.add(map);
          }
可是好像得不到预期的结果。困惑了两天,现在思路更加混乱,请各位给点意见和提示。

解决方案 »

  1.   

    有一个效率不算太高的方法,
    先查找一遍结果找到最大的列数
    然后开辟根据最大列数开辟一个二维空间
    比如 
    String [][maxcol]
    然后按照 1 1 "2005-01-01"
     1 2 "tom"
     1 3 "ok"
     2 1 "2005-01-02"
     2 2 "jack"
     2 3 "ok"中的填入这个二维数组中,
    比如上例:
    2005-01-01  tom  ok
    2005-01-02  jack ok
    如果再加一个字段比如
     1 1 "2005-01-01"
     1 2 "tom"
     1 3 "ok"
     2 1 "2005-01-02"
     2 2 "jack"
     2 3 "ok"
     3 1 "2005-01-02"
     3 2 "add"
     3 3 "ok"
     3 4 "hello " 就会这样子
    2005-01-01  tom  ok
    2005-01-02  jack ok
    2005-01-02  add  ok  hello
      

  2.   

    有的,
    int[][] aiArray = new int[10][10];
      

  3.   

    多谢告知了这关键一点,我一直以为java不支持多维数组,刚才重新查找资料,才明白过来。等我明天试试你的办法。