很久没有积累东西了,碰巧前几天遇到一个的问题,虽然不大但是比较有意思,在这里稍微记录一下,以后可以作为面试题之类的考验其他人,想想也远比那些被我们诟病的题目要实际的多:
有表结构如下:
T_SOME_TABLE{
crowid varchar(36);
zrmb float(7,3);
zjdw float(7,3);
}
问以下两段代码,哪段会出现错误,为什么?
---------------------------------------代码片段1:--------------------------------------
后台代码如下:
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);
---------------------------------------代码片段2:--------------------------------------
后台代码如下:
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();
分享到:
相关推荐
当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的光标,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现...
都不是特别习惯,尤其有些界面按照惯性思维很难找到入口,而且一些配置也发 生了变化,在这里我给大家通过用18.1 版本配置PCIE 来讲解一下新版本的基 本使用,由于个人能力有限,可能会有一些错误,欢迎大家指正,话...
第二课点评·音效误用和运动惯性错误 第二课匹配画面和音乐的风格 第二课固定机位如何拍出好视频 第二课镜头设计原则:短片的定位 第二课慢动作的影像原理和视觉特点 第二课视频素材的整理和剪辑基础操作 第六...
例八:从桌面或开始菜单中打开任何一个程序, 出现错误提示: "0x........"指令引用的"0x00000000"内存,该内 存不能为"read"。省略号代表可变值。而从运行中打开程序没问题。 解决方法 : 运行 regedit 进入注册表 , ...
公司的车辆使用两个不平坦的轮子-一个轮子(技术)以喷气速度运行,另一个(人)以布洛克推车速度运行。 解决这种“人类思维惯性”对维持业务至关重要。要解决信息技术带来的社会可持续性问题,您需要一种行为方法...
在后来刚开始学习中,我带着比较强的针对对象编程思维惯性来写代码。但后来发现,带着面向对象的思路来写Go语言代码会很难继续写下去,或者说看了系统源代码或其他知名的开源包源代码后,围绕着struct和interface来...
最近在朋友圈流行了这样的一张小学数学题,当然结果是“出乎意料”,看似简单的结果,几乎很少有人作对,而分析下来的原因无非是惯性思维下的粗心导致完全错误,那么云层带大 最近在朋友圈流行了这样的一张小学数学...
我们固守成规,保持着惯性思维,把错误周而复始地循环上演。过了15秒了?喔,也许你不是一位普通网民。那么我就多给你说些吧。作为Chartbeat的CEO,我的工作就是服务于互联网从业者(比如Time.com),并且给他们提供...
经验可以有效提高你的管理效率,但经验也容易造成惯性思维,导致故障延误。故,应根据现象的表现和出现的 体情况给予谨慎的判断,同时做好记录和分析笔记。巡检过程可以参照如下的步骤进行: 1、远程服务器至桌面; ...
“在人们惯性思维里,都觉得在河里或水库里游泳比较危险。其实从最近几年的经验看,游泳池里出意外的案例也特别多而且有增多的趋势。” 你知道吗?人在溺水后,2分钟后将失去意识;4-6分钟身体将遭受不可避免的伤害...