恒表的对应类的属性的赋值问题研究
来源:互联网 发布:中国海关出口数据 编辑:程序博客网 时间:2024/05/16 08:05
实际开发中,数据库往往会有冗余,因为数据量巨大,为了避免表间过多的关联,使查询效率降低!采用恒表是一个不错的选择
而恒表就往往有很多字段,一般字段间还有规律可循,那么,我们从实际环境总采集到的数据,如何向恒表对应的类的属性进行赋
值呢?巨量的属性 不可能挨个赋值,所以基于恒表对应类的属性赋值可行性需要研究
我尝试很多方法,但是都失败了,后来采用的反射进行赋值,发现这个是一个不错想法,现在写下来给大家分享:
假若有一个多的类:ExamResult 是对应试卷题目的信息的考试结果的一个实例类
假设属性为:Class ExamResult{
private int question1Id;
private int question1Score;
... ... //中间ID198个属性
... ... //中间Score198个属性
private int question200Id;
private int question200Score;
}
那个我们将学生的考试结果数据采集到了,如何给这个类的400个属性赋值呢?很显然挨个赋值是非常不现实和笨拙的方法
下面采用反射方法赋值:
主要思路是:遍历问题,依据问题的ID来拼成字符串:setQuestion+i+Id,setQuestion+i+Score
然后对ExamResult进行反射 Method[] methods = examResult.getClass().getMethods();
循环比较setQuestion+i+Id,setQuestion+i+Score methods[j].getName();
相同进行赋值
下面是实现简要代码:
for (int i = 0; i < questions.size(); i++) {
for(int j=0;j<methods.length;j++){
String str = "setQuestion"+(i+1)+"Id"; //第i+1个属性的set方法
String str_1 = "setQuestion"+(i+1)+"Score";
if(str.equals(methods[j].getName())){
System.out.println(str);
System.out.println(methods[j].getName());
//对examResult的属性进行赋值 将序列号为i的questions的ID赋给examResult
try {
methods[j].invoke(examResult, new Object[]{Long.parseLong(questions.get(i).getId())});
} catch (Exception e) {
e.printStackTrace();
}
}
if(str_1.equals(methods[j].getName())){
if (!questions.get(i).getAnswer().equals(answers.get(i))) {
//当问题的答案不一致时
total = total - score;
try {
methods[j].invoke(examResult, new Object[]{new Long(0)});
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//要如何赋给 ExamResult的属性?
//examResult.setQ+i+""+Id(questions.get(i).getId());
//score 在此处存储学生的成绩信息
//存入context
}else{
//当问题的答案和问题的答案一致时
try {
methods[j].invoke(examResult, new Object[]{new Long(score)});
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
相对比挨个赋值,这个代码量少了很多!不错的解决方法~~
- 恒表的对应类的属性的赋值问题研究
- vc控件的赋值问题研究
- 从数据库读取数据后利用反射为对应的实体类的属性赋值
- 类的属性赋值失败
- JS基础类型的属性赋值问题
- 只读属性的赋值
- STL关于赋值的研究
- 遍历 Map 对象, 利用反射为 Class 对象的对应的属性赋值.
- iOS类的属性研究
- c#属性的赋值问题:为什么属性只读,但是构造函数却还是可以赋值
- 利用“反射”给类的属性赋值。
- 类的属性取值与赋值
- javabean 不同的类 相同属性赋值
- Jquery中给属性赋值时应该注意的问题
- 随鼠标浮动的层,style.left属性赋值问题
- 关于struts2里action的name属性赋值问题
- 兼容性:jquery在ie7下的(Rowspan)属性赋值问题
- Struts2Action的属性赋值方式
- Sqlite 插入数据慢解决方法
- tixmlnode(转http://hi.baidu.com/hello%5Fzcs/blog/item/c406d45899906d87800a18dd.html)
- 同创伟业王维:行业泡沫期易诞生伟大公司
- Windows Live Writer插件集萃
- vs 制作安装程序-安装部署一例(转)
- 恒表的对应类的属性的赋值问题研究
- MFC中简单的文件操作writeString,readString
- 优龙boot270 bootloader main.S
- cmd 下的一些命令行
- 主要几种通信协议的性能比较收藏
- 检测页面元素(图片)加载完所用时间。
- 驱动开发(1)
- hdu 1241 bfs or dfs
- 合并排序