Java程序员惯性思维的一个错误
有表结构如下:
- 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程序员惯性思维的一个错误相关推荐
- 90 % Java 程序员被误导的一个性能优化策略
转载自 90 % Java 程序员被误导的一个性能优化策略 我们经常看到一些 Java 性能优化的书或者理念,说不要在循环内定义变量,这样会占用过多的内存影响性能,而要在循环外面定义.接触 Jav ...
- java程序员被误导的一个概念,Set也可以有序
转载自 java程序员被误导的一个概念,90%人不知道 我们经常听说List是有序且重复的,Set是无序不重复的.这里有个误区,这里说的顺序有两个概念,一是按添加的顺序排列,二是按自然顺序a-z排列. ...
- java程序员年度总结_一个五年Java程序员的年终总结,献给还在迷茫中的你
我越来越担心我作为一个Java程序员的未来. 恍然间,发现自己在这个行业里已经摸爬滚打了五年了,原以为自己就凭已有的项目经验和工作经历怎么着也应该算得上是一个业内比较资历的人士了,但是今年在换工作的过 ...
- Java 程序员排行前 10 的错误,你有没有中?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 风一样的码农 来源| cnblogs.com/ ...
- Java程序员:这是一个最好的时代,也是一个最坏的时代...
狄更斯的<双城记>有一句话:这是一个最好的时代,也是一个最坏的时代. 对大多数人来说,这是一个最坏的时代.因为变化太大.太快,远远超过普通人的想象力和承受力.对极少数人来说,这也是一个最好 ...
- JAVA程序员如何快速写一个QQ机器人?
只要你有java环境,知道maven. 建一个java版的qq机器人,只需要一条命令 通过命令创建 mvn archetype:generate -B \-DarchetypeGroupId=com. ...
- java list top_Java程序员最常犯的错误盘点之Top 10
原标题:Java程序员最常犯的错误盘点之Top 10 人非圣贤,孰能无过.都说Java语言是一门简单的编程语言,基于C++演化而来,剔除了很多C++中的复杂特性,但这并不能保证Java程序员不会犯错. ...
- Python程序员常犯的十个错误
不管是在学习还是工作过程中,人都会犯错.虽然Python的语法简单.灵活,但也一样存在一些不小的坑,一不小心,不管是初学者还是资深Python程序员都有可能会栽跟头. 常见错误1:错误地将表达式作为函 ...
- Java黄金五年——1~5年一个Java程序员从入行到大牛的晋升之路
在程序界流行着一种默认的说法叫"黄金5年",也就是一个程序员从入职的时候算起,前五年的选择直接影响着整个职业生涯中的职业发展方向和薪资走向,如何走好这5年,彻底从一个刚入行的菜鸟蜕 ...
最新文章
- NodeJS API Process全局对象
- linux c 获取系统进程总数
- java gui 层次结构_javaGUI教学图形界面的层次结构.ppt
- jdbc时区_什么比日期和时区更难? SQL / JDBC中的日期和时区!
- oledb excel java_C#中Excel 2016的oledb连接字符串
- jsp做看板_如何使用看板做敏捷开发
- TrustToken向Curve上tfTUSD贷款池新投入2400万美元资金
- SpringBoot配置Druid数据源,持久层分别 mybatis,jdbc
- python series增加一行_关于python:将一个列表或系列作为一行添加到pandas DataFrame中?...
- 在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法
- php ajax怎么拿id,php ajax无刷新分页,支持id定位
- pdf reference官方指南之-语法基础和文件结构
- 汇编常用DOS命令调用
- 机器视觉之表面缺陷检测
- 投屏php源码,乐享影视app源码 e4a影视app开源源码 支持下载存缓投屏等功能
- 常用颜色透明度色值表
- 【附源码】计算机毕业设计JAVA中国历史网站
- 重命名Active Directory域名
- sql中用EXISTS替代IN、用NOT EXISTS替代NOT IN显著变化
- QTP .net插件
热门文章
- 全角假名转换半角假名+验证是否为半角假名
- Go核心开发学习笔记(廿九) —— 反射
- DCDC电源SW电压尖峰过冲问题解析
- Linux 不同用户环境变量
- T1103陶陶摘苹果(信息学一本通C++)
- python使用函数求特殊a串数列和_习题6-2 使用函数求特殊a串数列和
- 2.1、MySQL Workbench 使用
- 服务器网络性能调优工具
- MPB:中农冯固组-研究菌丝际微生物互作的胡萝卜根器官-丛枝菌根真菌双重培养体系...
- 【语音处理】基于matlab实现语音基频检测