ArrayList允许添加null值,就容易造成了list内的对象转换出现java.lang.NullPointerException异常。

场景:

数据库 select  min(id) as id,min(name) as name from user where 1=2;

查询出的不是没有记录,而是一条 null,null这样的记录,导致User对象为null

List<User> users = useDao.find(xxx); //size=1,All elements are null

这时候对user对象操作就会报错!

解决办法

法一:移除null元素

示例:

 List<User> users = new ArrayList<User>();
users.add(null);
users.add(null);
users.add(null);
System.out.println("size:"+users.size()); //size:3
for(User user:users){
try {
System.out.println("id:" + user.getId() + ",name:" + user.getName());
}catch (Exception ex){
System.out.println(ex); //java.lang.NullPointerException
}
}
users.remove(null); //移除第一个null
System.out.println("size:"+users.size()); //size:2
users.removeAll(Collections.singleton(null)); //移除所有的null元素
System.out.println("size:"+users.size()); //size:0
//不会进入循环
for(User user:users){
try {
System.out.println("id:" + user.getId() + ",name:" + user.getName());
}catch (Exception ex){
System.out.println(ex);
}
}
法二:保证数据库查询出来没有null值,即遇null值转换为默认值

mysql下使用ifnull/case when均可实现
select  ifnull(min(id),-1) as id,ifnull(min(name),'defaultName') as name from user where 1=2;
select  case when min(id) is null then -1 else min(id) end as id,case when min(name) is null then 'defaultName' else min(name) end as name from user where 1=2;

这样子查询出来的结果如下
id name
-1 defaultName 总结:具体情况依据业务实现,当对数据库查询统计的时候,没有group by关键字而使用聚集函数的时候一定要注意null值情况(有group by是分组统计,找不到记录就是没有记录),至于你想要始终查询出来一条记录且元素有默认值,还是不要显示记录,依据业务而定。两种情况对应两种解决方案。
 


list All elements are null引起的异常的更多相关文章

  1. Mybatis+SpringBoot 项目All elements are null

    xml文件内容如下 查出来的集合长度是有的,但是会出现All elements are null 解决方案: 注意我的xml文件全部是这样的,并且我调用的sql返回值是  resultType=&qu ...

  2. MySQL Replication--修改主键为NULL导致的异常

    测试环境:MySQL 5.5.14/MySQL 5.6.36 测试脚本: create table tb001(id int primary key,c1 int); alter table tb00 ...

  3. 从e.getMessage()为null看Java异常机制

    问题:自定义异常触发了,但是自定义的提示信息RuntimeException却没有带过来. throw new RuntimeException("不允许插入报价主项和报价子项同时重复的记录 ...

  4. 使用MyBatis查询 返回类型为int,但是当查询结果为空NULL,报异常的解决方法

    使用MyBatis查询 返回类型为int,但是当查询结果为空NULL,会报异常. 例如: <select id="getPersonRecordId" parameterTy ...

  5. 使用MyBatis查询int类型字段,返回NULL值时报异常的解决方法

    当配置mybatis返回int类型时 select id="getUserIdByName" parameterType="string" resultType ...

  6. Module 'null' not found异常解决办法

    百度原因:是因为在   /WEB_INF/web.xml文件中   <servlet> <servlet-name>ActionServlet</servlet-name ...

  7. [Effective Java]第九章 异常

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. Java异常(二) 《Effective Java》中关于异常处理的几条建议

    概要 本章是从<Effective Java>摘录整理出来的关于异常处理的几条建议.内容包括:第1条: 只针对不正常的情况才使用异常第2条: 对于可恢复的条件使用被检查的异常,对于程序错误 ...

  9. 《Effective Java》读书笔记 - 9.异常

    Chapter 9 Exceptions Item 57: Use exceptions only for exceptional conditions 这条item的意思就是,千万不要用except ...

随机推荐

  1. controlfile 备份到trace文件例子

    主要是为了学习oracle的克隆.参考: http://www.dba-oracle.com/oracle_tips_db_copy.htm 执行: SQL>alter database bac ...

  2. Linux日记Day3---Linux的文件属性与目录配置

    Linux最优秀的地方之一,就在于它的多用户.多任务环境.为了让用户具有较安全的管理机制,文件的权限管理是很重要的.Linux通常将文件的访问方式分为分为三个类别,分别是owner/group/oth ...

  3. idea 项目java版本选项位置

    藏这里了 还有一个

  4. SpringBoot配置Aop笔记【例子】

    众所周知,spring最核心的两个功能是aop和ioc,即面向切面,控制反转.这里我们探讨一下如何使用spring aop. 1.何为aop aop全称Aspect Oriented Programm ...

  5. TICTOC: Header Only C++ Timer

    感觉最近的更新频率略高啊-哈哈- 这次的带来的是一个十分简单便利的C++计时库. 项目地址:https://github.com/miaoerduo/tictoc 欢迎Start和提MR. 项目中有详 ...

  6. 软件工程第二次作业(JUnit的使用)

    初次使用JUnit 感谢学习资源Junit使用的超简单介绍源 一.开发环境及界面截图: 系统   Windows 10      编辑器       eclipse         语言        ...

  7. Android几行代码实现监听微信聊天

    原创作品,转载请注明出处,尊重别人的劳动果实. 2017.2.7更新: *现在适配微信版本更加容易了,只需要替换一个Recourse-ID即可 *可以知道对方发的是小视频还是语音,并获取秒数. *可以 ...

  8. Js_特效II

    字号缩放 让文字大点,让更多的用户看的更清楚.(也可以把字体变为百分比来实现)<script type="text/javascript">  function doZ ...

  9. 【Unity Shader】(三) ------ 光照模型原理及漫反射和高光反射的实现

    [Unity Shader](三) ---------------- 光照模型原理及漫反射和高光反射的实现 [Unity Shader](四) ------ 纹理之法线纹理.单张纹理及遮罩纹理的实现 ...

  10. cocos2d-x学习之路(一)——安装cocos2d-x

    这两天想从pygame和SDL换到cocos2d-x上(主要还是为了跨平台开发),所以这里先来看看如何安装cocos2d-x. 首先到官网去下载cocos2d-x:传送门 点击上方菜单栏的Produc ...