关于微人事中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跳出方法
- 关于方法调用都是一层接一层的调用,一步步执行
关于微人事中POI导入文件到数据库的异常以及自己的一些技术心得的更多相关文章
- PHP:phpMyAdmin如何解决本地导入文件(数据库)为2M的限制
经验地址:http://jingyan.baidu.com/article/e75057f2a2288eebc91a89b7.html 当我们从别人那里导出数据库在本地导入时,因为数据库文件大于2M而 ...
- Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)
ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件 ...
- POI导入导出
一.使用POI导出Execl表格 需要的jar包 package cn.yxj.poi; import java.io.FileOutputStream; import java.util.Date; ...
- Java利用POI导入导出Excel中的数据
首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...
- Java中使用poi导入、导出Excel
一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...
- poi 导入导出的api说明(大全)
原文链接:http://www.cnblogs.com/qingruihappy/p/8443101.html poi 导入导出的api说明(大全) 一. POI简介 ApachePOI是Apache ...
- POI导入和导出Excel总结
POI导入和导出Excel总结 POI使用总结 1.POI读取Excel 打开工作簿的方式有以下两种简单的应用,POI读取和输出工作簿文件都可以通过以下两种方式来声明: //通过输入流的方式打开本 ...
- 万能poi导入功能模板
同时支持2007版本和2003版本,空行过滤,纯数字类型数据格式处理,日期格式处理等 package com.yss.db.util; import com.yss.base.common.excep ...
- 使用POI导入EXCEL报java.lang.IncompatibleClassChangeError
使用POI导入xls格式的excel报java.lang.IncompatibleClassChangeError异常,而导入xlsx正常. oracle.apps.fnd.framework.OAE ...
- 在java poi导入Excel通用工具类示例详解
转: 在java poi导入Excel通用工具类示例详解 更新时间:2017年09月10日 14:21:36 作者:daochuwenziyao 我要评论 这篇文章主要给大家介绍了关于在j ...
随机推荐
- 2023.1.21 app后端pyinstaller启动
1.打包后会在dist文件夹中暂时生成一个新的文件目录,点击app.exe后也是在这个暂时的文件目录下读取文件的,所以需要以下代码拷贝添加原始项目中的文件 pyinstaller -D app.py ...
- vue 高级部分
props的其它内容 props的作用就是用于在子组件中接收传入的数据 props的使用方式 1.数组 props:['name'] 2.对象,指定传入变量的类型 props:{name:Number ...
- js两个数组对象合并去重
- ssm框架基本原理
一.前言 SM框架是标准的MVC模式,将整个系统划分为四层:View层,Controller层,Service层,Dao层 SSM(Spring+SpringMVC+MyBatis)框架集由Sprin ...
- html页面间传递参数
$.query.get("id") jquery.params.js代码 /** * jQuery.query - Query String Modification and Cr ...
- Git_基础理论
三个区域 Git本地有三个工作区域:工作目录(Working Directory).暂存区(Stage/Index).资源库(Repository或Git Directory).如果在加上远程的git ...
- python调用java&反编译地址
反编译工具地址: https://github.com/java-decompiler/jd-gui/releases 你想知道的JPype全在这里∞ 先总结自己趟的坑 1. python进程是6 ...
- 用javassist和CGLIB 解决JDK动态代理的缺陷
用 javassist 解决 JDK 动态代理的缺陷 JDK动态代理的缺陷 要求目标类必须实现接口,否则产生不了代理.有些场景下,目标类也要产生代理类但是木有实现接口,这个时间 Java 中有两个常 ...
- docker方式部署的gitlab跨版本迁移升级
之前代码服务器用的 beginor/gitlab-ce:11.3.0-ce.0 的版本,而当前时间已经到12.4.1了. gitlab 官方已经开始支持多语言, 而且也提供了 docker 镜像, b ...
- time命令详解
Linux中time命令,我们经常用来计算某个程序的运行耗时,用户态cpu耗时,系统态cpu耗时. 例如: $ time foo real 0m0.003s user 0m ...