Java程序员惯性思维的一个错误
2011-12-27 13:10
295 查看
有表结构如下:
T_SOME_TABLE{
crowid varchar(36);
zrmb float(7,3);
zjdw float(7,3);
}
问以下两段代码,哪段会出现错误,为什么?
代码片段一:
//后台代码如下:
String hqlStr="select SUM(t.zrmb) AS SUM_1,SUM(t.zjdw) AS SUM_2 from T_SOME_TABLE t where 1=1 ";
List sumList=baseDao.find(hqlStr);//hibernate实现查询HQL汇总语句返回结果List
request.setAttribute("sumList",sumList);
//前台代码如下:
String sum1="";
String sum2="";
ArrayList sumList=request.getAttribute("sumList")==null?null:(ArrayList)request.getAttribute("sumList");
if(null!=sumList){
for(int i=0;i<sumList.size();i++){
Object[] tempObj=(Object[])sumList.get(i);
sum1=tempObj[0]==null?"0.0":tempObj[0].toString();
sum2=tempObj[1]==null?"0.0":tempObj[1].toString();
}
}
out.prinln("sum1:"+sum1);
out.prinln("sum2:"+sum2);
代码片段二:
//后台代码如下:
String hqlStr="select SUM(t.zrmb) AS SUM_1 from T_SOME_TABLE t where 1=1 ";
List sumList=baseDao.find(hqlStr);//hibernate实现查询HQL汇总语句返回结果List
request.setAttribute("sumList",sumList);
//前台代码如下:
String sum1="";
ArrayList sumList=request.getAttribute("sumList")==null?null:(ArrayList)request.getAttribute("sumList");
if(null!=sumList){
for(int i=0;i<sumList.size();i++){
Object[] tempObj=(Object[])sumList.get(i);
sum1=tempObj[0]==null?"0.0":tempObj[0].toString();
}
}
out.prinln("sum1:"+sum1);
实际运行会发现 代码片段2会出现错误 而代码片段1是正常可以运行的,这里是在功能开发过程中 片段2是在片段1的基础上惯性思维去实现的,而实际运行却会发现 结果并不是想要的那样,这个动手能力强的人可以实际调试一下就会很快明白里面的所以然。这里简单说一下:
做过hibernate的人都知道 用hibernate调用sql查询出的汇总语句,返回的结果是封装成Object的保存到List中的,而代码1和代码2相比较,差别只是在字段的多少上,如果是2个以上的字段 结果是封装成Object[]数组的,这个无可争议,但是如果是一个字段的话List里保存的是Object,而不是Object[]数组。
这样就可以推论这里hibernate内部是做了处理的。
代码2循环中应该是:
Object tempObj=(Object)sumList.get(i);
sum1=tempObj==null?"0.0":tempObj.toString();
T_SOME_TABLE{
crowid varchar(36);
zrmb float(7,3);
zjdw float(7,3);
}
问以下两段代码,哪段会出现错误,为什么?
代码片段一:
//后台代码如下:
String hqlStr="select SUM(t.zrmb) AS SUM_1,SUM(t.zjdw) AS SUM_2 from T_SOME_TABLE t where 1=1 ";
List sumList=baseDao.find(hqlStr);//hibernate实现查询HQL汇总语句返回结果List
request.setAttribute("sumList",sumList);
//前台代码如下:
String sum1="";
String sum2="";
ArrayList sumList=request.getAttribute("sumList")==null?null:(ArrayList)request.getAttribute("sumList");
if(null!=sumList){
for(int i=0;i<sumList.size();i++){
Object[] tempObj=(Object[])sumList.get(i);
sum1=tempObj[0]==null?"0.0":tempObj[0].toString();
sum2=tempObj[1]==null?"0.0":tempObj[1].toString();
}
}
out.prinln("sum1:"+sum1);
out.prinln("sum2:"+sum2);
代码片段二:
//后台代码如下:
String hqlStr="select SUM(t.zrmb) AS SUM_1 from T_SOME_TABLE t where 1=1 ";
List sumList=baseDao.find(hqlStr);//hibernate实现查询HQL汇总语句返回结果List
request.setAttribute("sumList",sumList);
//前台代码如下:
String sum1="";
ArrayList sumList=request.getAttribute("sumList")==null?null:(ArrayList)request.getAttribute("sumList");
if(null!=sumList){
for(int i=0;i<sumList.size();i++){
Object[] tempObj=(Object[])sumList.get(i);
sum1=tempObj[0]==null?"0.0":tempObj[0].toString();
}
}
out.prinln("sum1:"+sum1);
实际运行会发现 代码片段2会出现错误 而代码片段1是正常可以运行的,这里是在功能开发过程中 片段2是在片段1的基础上惯性思维去实现的,而实际运行却会发现 结果并不是想要的那样,这个动手能力强的人可以实际调试一下就会很快明白里面的所以然。这里简单说一下:
做过hibernate的人都知道 用hibernate调用sql查询出的汇总语句,返回的结果是封装成Object的保存到List中的,而代码1和代码2相比较,差别只是在字段的多少上,如果是2个以上的字段 结果是封装成Object[]数组的,这个无可争议,但是如果是一个字段的话List里保存的是Object,而不是Object[]数组。
这样就可以推论这里hibernate内部是做了处理的。
代码2循环中应该是:
Object tempObj=(Object)sumList.get(i);
sum1=tempObj==null?"0.0":tempObj.toString();
相关文章推荐
- Java程序员惯性思维的一个错误
- 深入JVM之号称世界上所有Java程序员都会犯的一个错误
- Java程序员常犯的10个错误
- 从Java 到Android 一个程序员的自我整理。
- 一个Java程序员应该掌握的10项技能
- 程序员必知:Java代码常见的十种错误
- Java编程——怎样尊重一个程序员
- 一个Java程序员应该掌握的10项技能
- [Java][Tomcat]在eclipse中运行tomcat报的一个错误
- 转:张奇 - 一个Java程序员应该掌握的10项技能
- Java执行一个SQL查询未提交,遇到1205错误。
- 对于一个平庸java程序员的自述
- 做为一个Java程序员,你需要哪些傍身的技能?
- 一个程序员的Java和C,C++学习之路(整理)
- 一个java程序员的成长历程(转)
- 一个Java程序员应该掌握的10项技能
- 一个Java程序员应该掌握的10项技能
- 一个五年Java程序员的年终总结,献给还在迷茫中的你!
- 一个用JAVA编写的洗澡提醒程序,对话框练习,程序员也可以逗女朋友玩
- 好程序员:一个Java高级工程师的必备技能