要给一批设备建立资料卡片档案,卡片大概有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);
}
可是好像得不到预期的结果。困惑了两天,现在思路更加混乱,请各位给点意见和提示。
关键情况是有的卡片是单条记录,如设备名称、编号等,有的卡片却记录多条,如按日期的检验情况。我都把他们的值存在一个数据表里。
数据表大致如下:
设备: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);
}
可是好像得不到预期的结果。困惑了两天,现在思路更加混乱,请各位给点意见和提示。
先查找一遍结果找到最大的列数
然后开辟根据最大列数开辟一个二维空间
比如
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
int[][] aiArray = new int[10][10];