全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货  >  详情

JDBC操作时的NullPointerException处理过程

来源:千锋教育
发布人:lx
2023-03-24

推荐

在线提问>>

  一. 前言

  每一个程序猿在曲迂奋进的成神路上,都会遇到一些大大小小的妖魔和臭虫阻碍,可以说这些bug会伴随着我们整个的职业生涯。想当年老师也是经历了无数次的痛苦挠头,数不清的排错与实验,丢掉了不知道多少根头发,最后才以”半秃之身“成就了今天的自己。所谓"不经风雨,怎能见彩虹!不见bug,怎能成神",正是如此!

  今天老师就用自己十几年的功力,来教大家如何解决我们开发路上遇到的常见bug。

  遇见bug,淡定莫慌!老师告诉你,心平气和地对待bug,去分析,去排错!

NullPointerException处理过程

  二. NullPointerException异常

  为了更好的教会大家如何解决异常,今天老师就用一个Java开发时最常见的空指针异常来进行演示,我们一起来看看NPE异常的解决过程。如下图所示:

  

 

  老师在这里给大家准备了一个经典的NPE空指针异常。当出现上面问题的时候,有很多小白都会不知所措,遇到问题完全没有头绪,抓耳挠腮的就是不知道如何下手解决。也有一些稍微表现好点的同学,会在第一时间进行百度,或者是问老师,问其他同学,最后会知道自己遇到了大名鼎鼎的空指针异常,但至于为什么出现这个异常,则又完全没有了头绪。老师作为一个过来人,对小白的这些表现其实是感同身受的。

  今天老师就那么以NPE为例,带着大家层层分析,一点点教会你如何解决异常。

  三. 异常分析

  NullPointerException

  首先我们要搞清楚,自己遇到的异常到底是什么?就比如我们今天所说的空指针,到底是怎么回事呢?

  java.lang.NullPointerException:空指针异常,是指我们在代码中调用某个类对象时,结果在代码执行期间JVM虚拟机发现该对象没有赋值,即值为null,此时就会出现NullPointerException异常。

  一个案例

  我们可以来看看老师给大家设计的下面这个案例。

  2.1 测试接口

  在下面的代码中,我们会通过JDBC的方式,将数据库表中的所有员工信息查询并到封装到List集合中,并使用单元测试来测试接口功能。代码如下:

  

  2.2 查询功能

  上面的代码执行之后,我们会在控制台的异常信息中发现,在第29行代码"com.qf.test.TestEmployee.testFindAllEmp(TestEmployee.java:29)"中出现了空指针问题。如果我们仔细观察,会发现第29行代码,又在调用第42行代码: "com.qf.dao.impl.EmpDaoImpl.findAllEmp(EmpDaoImpl.java:42)"。我们继续阅读第42行代码,如下图所示:

  

  该方法的逻辑是要将查询到的多条记录都封装到List集合中,而List集合里添加的是员工对象,我们上面代码的错误提示的就是出现在这个方法中的第42行!而42行刚好就是我们从数据库中得到每一行每一列的字段信息。

  细心的同学会看到,我们上面的Emp emp = null ; 这里只是声明了Emp对象,但并没new。我们每循环一次就表示会封装一个员工信息到集合中,但却没有给emp对象赋值,所以此时emp对象就是null。

  这样经过层层摸排,我们就知道了产生空指针的真正原因所在,是因为我们没有给某个对象赋值!那么该问题怎么解决呢?

  四. 解决办法

  通过上面的代码分析,我们发现出现NullPointerException异常的原因,是因为我们在接口实现类中没有给Emp对象赋值,导致emp对象为null。当我们使用null去调用对应的方法来封装数据时,就会出现空指针异常。其实空指针异常解决起来也比较简单,我们只需要在第42行代码前面加入如下操作:

  Emp emp = null ;

  while (rs.next()){

  emp = new Emp() ; //封装员工数据

  emp.setId(rs.getInt("id"));

  emp.setName(rs.getString("name"));

  emp.setAge(rs.getInt("age"));

  emp.setGender(rs.getString("gender"));

  emp.setAddress(rs.getString("address"));

  emp.setSalary(rs.getDouble("salary"));

  //将emp添加集合中

  list.add(emp) ;

  }

  上面的代码,我们只是增加了给emp对象赋值的过程!这样就解决了空指针异常!

  五. 总结与反思

  很多初学者在刚开始学习时,有时候一个变量定义错了,或者是为了给变量赋值,都可能会引发一系列错误。一旦出现错误,很多初学者往往要花费几十分钟甚至几个小时的时间去排查故障,甚至还有一些同学最后也搞不定这些错误,严重地挫伤了学习的积极性。

  其实初学者遇到的绝大多数问题,都是因为粗心大意造成的。我们以后在写代码时,不要去求快,而是要求稳,每一行代码都要认真思考琢磨,用心去打磨自己的项目,这正应了我们的一句老话:”磨刀不误砍柴工“。

  今天的NullPointerException异常解决过程,给了我们初学者一个警醒,写完业务代码后,一定要再梳理一遍业务流程,尽量要做到以下几点:

  编写业务方法之后,根据业务需求自己再梳理一遍业务的实现过程;

  如果出现了问题,可以打断点一步步往下调试,并结合简单的输出语句验证输出结果;

  遇到错误不要慌,沉下心来一点点思考,到底是哪个地方可能有问题。

  只要你能够按照老师的流程走,你会发现原来bug也没有那么可怕。

相关文章

什么是redux?

为什么会出现ref?

防抖和节流是什么?

vue的计算属性,特性,应用是什么?

负载均衡原理是什么?

开班信息 更多>>

课程名称
全部学科
咨询

HTML5大前端

Java分布式开发

Python数据分析

Linux运维+云计算

全栈软件测试

大数据+数据智能

智能物联网+嵌入式

网络安全

全链路UI/UE设计

Unity游戏开发

新媒体短视频直播电商

影视剪辑包装

游戏原画

    在线咨询 免费试学 教程领取