list All elements are null引起的异常,elementsnull

2018-01-25 20:14:39

list All elements are null引起的异常,elementsnull


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


  • 2017-04-12 11:22:43

    WebView你真的熟悉吗?看了才知道

    在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。下面总结一下使用webview遇到的那些事、那些坑。

  • 2017-04-12 11:28:14

    史上最全webview详解

    WebView在现在的项目中使用的频率应该还是非常高的。 我个人总觉得HTML5是一种趋势。找了一些东西,在此总结。 本篇最后有一个非常不错 的 Html5Activity 加载类,不想看的可以直接跳下载。

  • 2017-04-12 23:11:59

    Android Studio签名打包的两种方式

    给我们自己开发的app签名,就代表着我自己的版权,以后要进行升级,也必须要使用相同的签名才行。签名就代表着自己的身份(即keystore),多个app可以使用同一个签名。

  • 2017-04-13 10:57:08

    webstorm 怎么关闭jshint

    You need to configure the inspections in Settings/Editor/Inspections, then in the list on the right, find JavaScript/JavaScript validity issues. That worked for me to remove the Chai warnings. (I am using the WebStorm 11 EAP at the moment.)

  • 2017-04-13 14:11:14

    MySQL中的describe关键字

    今天写代码的时候,有一个类的数据始终不能插入,老是提示在You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'describe, picPath1, picPath2, picPath3, picPath4, picPath5, agentId, belongStore' at line 1。因为用的是SSH进行插入,所以SQL语句不用自己写,检查了每个字段也没写错。

  • 2017-04-15 13:34:08

    Android官方技术文档翻译——清单合并

    一般情况下,有三种类型的清单文件需要合并成一个最终的应用程序清单,这里按照优先级顺序列出: Product flavors 和构建类型所指定的清单文件。 应用程序的主清单文件。 类库的清单文件。

  • 2017-04-15 21:47:44

    Android开发笔记——圆角和边框们

    在做Android界面开发时,我们往往希望它尽可能优美,尽可能显得专业。于是你看了看其他应用,哇,好多边框和圆角啊。你是不是也想给自己的应用加上边框和圆角效果?呃……那怎么做呢?如果你是从web前端跑到Android来的,那么我想你一定想到了不下三种解决方案。如用图片替代,用CSS3定义,用JS画。在Android中,其实也有类似的用法,本文将简单介绍两种Android圆角和边框的实现。