要给一批设备建立资料卡片档案,卡片大概有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);
}
可是好像得不到预期的结果。困惑了两天,现在思路更加混乱,请各位给点意见和提示。如果回答有效,还可以到这里接分: http://community.csdn.net/Expert/topic/4249/4249259.xml?temp=.6814844
关键情况是有的卡片是单条记录,如设备名称、编号等,有的卡片却记录多条,如按日期的检验情况。我都把他们的值存在一个数据表里。
数据表大致如下:
设备: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);
}
可是好像得不到预期的结果。困惑了两天,现在思路更加混乱,请各位给点意见和提示。如果回答有效,还可以到这里接分: http://community.csdn.net/Expert/topic/4249/4249259.xml?temp=.6814844
2、如果你说的是‘字段’我的建议,增加一条统计该表字段个数的sql,把统计后的个数作为你下面代码循环的次数。
3、统计表字段个数的sql,如:
select count(*) from user_tab_columns where table_name=upper('cardField')4、如果你说的是纪录个数,追加一个下面统计记录个数的sql,如:
select count(*) from cardField
为什么呢,因为卡片上项的排列方式是不同的,有的是简单的单项表单形式如form状,有的是多项列表如list状。但是这些卡片所有项的所有值都存在一个table里。
卡片:cardTable(cardid,cardname)
设备卡片:equipCard(ecid,eid,cardid)
1 1 checkequip
卡片字段:cardField(fid,cardid,fieldname)
1 1 checkdate
2 1 checkman
3 1 checkresult
疑惑:设备卡片中checkequip是cardid?ka卡片字段中1是cardid?
为什么不一样??比较晕.不知道是你表达问题,还是偶理解问题
设备卡片:equipCard(ecid,eid,cardid)
1 1 1