Java程序员惯性思维的一个错误

有表结构如下:

  1. T_SOME_TABLE{ 
  2. crowid varchar(36); 
  3. zrmb float(7,3); 
  4. zjdw float(7,3); 
  5. }  

  问以下两段代码,哪段会出现错误,为什么? 


代码片段一:

  1. //后台代码如下: 
  2.     String hqlStr="select SUM(t.zrmb) AS SUM_1,SUM(t.zjdw) AS SUM_2 from T_SOME_TABLE t where 1=1 "
  3.     List sumList=baseDao.find(hqlStr);//hibernate实现查询HQL汇总语句返回结果List 
  4.     request.setAttribute("sumList",sumList); 
  5.  
  6. //前台代码如下: 
  7.     String sum1=""
  8.     String sum2=""
  9.     ArrayList sumList=request.getAttribute("sumList")==null?null:(ArrayList)request.getAttribute("sumList"); 
  10.     if(null!=sumList){ 
  11.         for(int i=0;i<sumList.size();i++){ 
  12.             Object[] tempObj=(Object[])sumList.get(i); 
  13.             sum1=tempObj[0]==null?"0.0":tempObj[0].toString(); 
  14.             sum2=tempObj[1]==null?"0.0":tempObj[1].toString(); 
  15.         } 
  16.     } 
  17.     out.prinln("sum1:"+sum1); 
  18.     out.prinln("sum2:"+sum2); 


代码片段二:

  1. //后台代码如下: 
  2.     String hqlStr="select SUM(t.zrmb) AS SUM_1  from T_SOME_TABLE t where 1=1 "
  3.     List sumList=baseDao.find(hqlStr);//hibernate实现查询HQL汇总语句返回结果List 
  4.     request.setAttribute("sumList",sumList); 
  5.  
  6. //前台代码如下: 
  7.     String sum1=""
  8.     ArrayList sumList=request.getAttribute("sumList")==null?null:(ArrayList)request.getAttribute("sumList"); 
  9.     if(null!=sumList){ 
  10.         for(int i=0;i<sumList.size();i++){ 
  11.             Object[] tempObj=(Object[])sumList.get(i); 
  12.             sum1=tempObj[0]==null?"0.0":tempObj[0].toString(); 
  13.         } 
  14.     } 
  15.     out.prinln("sum1:"+sum1); 

  实际运行会发现 代码片段2会出现错误 而代码片段1是正常可以运行的,这里是在功能开发过程中 片段2是在片段1的基础上惯性思维去实现的,而实际运行却会发现 结果并不是想要的那样,这个动手能力强的人可以实际调试一下就会很快明白里面的所以然。这里简单说一下:

  做过hibernate的人都知道 用hibernate调用sql查询出的汇总语句,返回的结果是封装成Object的保存到List中的,而代码1和代码2相比较,差别只是在字段的多少上,如果是2个以上的字段 结果是封装成Object[]数组的,这个无可争议,但是如果是一个字段的话List里保存的是Object,而不是Object[]数组。

  这样就可以推论这里hibernate内部是做了处理的。


代码2循环中应该是:

  1. Object tempObj=(Object)sumList.get(i);  
  2. sum1=tempObj==null?"0.0":tempObj.toString(); 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值