关于微人事中POI导入文件到数据库的异常以及自己的一些技术心得
前言
在近四个月的时间里面,我的微人事项目才逐渐接近尾声,在昨天的测试接口中出现了两次数组越界以及一次空指针异常,三处异常我都通过吊事bug根据项目实际情况解决了,但是在空指针异常那里还是带有疑问,起初我是通过POI导出文件来导出数据库中的所有员工资料,后面怕数据库信息太多,就将员工数据删减到两条,但是为什么在POI导入文件代码的获取行数的时候获取到的行数还是最开始我导出员工数据的行数,这是我在昨天的测试接口中还未弄清楚的一点,如果有哪位直到请帮忙解释下。此次最重要的感受是我通过调试bug解决异常从而增进了自己的调试接口能力。
异常
- 在测试POI的导入文件接口的时候总共出现过两次数组越界异常。
- 数组越界异常:1)获取所有部门ID的时候、2)比较position对象属性值与单元格值时候出现的不存在报错-1;
- 空指针异常是出现在单元格空值。
原因
- 第一次数组越界异常是因为自己获取所有部门信息的函数调用错误
- 第二次数组越界异常是由于自己的Position实体类中没有添加重写的equals()方法(只比较name值)
- 空指针异常在于我获取的单元格行数为619(因为我是以导出数据库所有员工资料的基础上进行删除的),为了测试方便我删除了617行员工数据,只留下2行员工数据
解决方法
之前也是一直听我亲戚说通过调试bug来解决自己遇到的可解决的异常,我在网上找了一些视频进行了基础的了解,只知道简单的概念,自己没有落到实处,此次在这个调试接口的过程中,逐渐有了一些感受;
- 关于获取部门所有id,我是通过调试看到获取的id数量为1,但是我的数据表中部门数量为20,后面查看调用函数发现是自己在servce层调用获取所有部门id的函数调用错误
- 关于position的这个数组越界异常我调试了很久,心想的job_level进行验证就没有问题,为什么position类有问题呢,我首先是比较两者调试的区别,后面发现在joblevel接口测试的时候出现了equals方法比较joblevel的name值与数据表中的所有joblevel值进行比较,而我的position并没有进行比较就直接报错-1;这时我就发现是因为我的Position实体类中没有添加equals方法,后面就直接通过快捷键添加该方法进行比较,但是还是出现问题,再次查看joblevel的equals()方法,发现它只进行了name值比较,转头一想在单元格值与数据表中数据进行比较的时候也只是比较name一个值,故修改了eqauls()方法,后面就没有出现该类异常。
- 解决完上面的两个数组越界异常的时候,又出现了空指针异常;虽然出现了问题,但是我充满了解决问题的信心,因为我通过前两次的调试,觉得自己行。故我就从出错地方开始打断点调试,发现导入一个用户没有问题,两个用户也没有问题,再导入第三个用户的时候出现空指针异常,再去查看获取行的参数时候出现了619,而我想要的是3,故此找到了问题所在,但是还是没有弄明白为什么我已经删除了之前数据,但是POI还是获取的行数为619
小结
本次调试bug重点是在于加深了几个调试按钮F8、9、10、11的概念以及方法调用的步骤
- F8:跳过方法,F9进入自己编写的方法,F10进入源码,F11跳出方法
- 关于方法调用都是一层接一层的调用,一步步执行