Java中ArrayList空值处理:MySQL查询结果写入Excel报空指针异常
解决Apache POI写入Excel时因ArrayList空值导致的NullPointerException问题
我来帮你搞定这个问题——你遇到的NullPointerException根源非常明确:当response列表里的元素是null时,你直接调用了response.get(j).toString(),而null对象根本没有toString()方法,自然会触发空指针异常。另外你的循环还有个小bug,咱们一起修正。
问题分析
你的response列表包含null值(来自数据库中lastresponse字段的空值),但写入Excel时没有做任何空值判断,直接执行response.get(j).toString(),这就是报错的核心原因。同时原循环的条件j <= response.size()会导致IndexOutOfBoundsException,因为列表的索引范围是0到size()-1,当j等于size()时,response.get(j)会越界。
解决方案
根据你的需求,提供两种实现方式:
方案1:在对应单元格插入空值
修改写入Excel的代码,先判断元素是否为null,同时修正循环边界和行不存在的潜在问题:
for (int j = 0; j < response.size(); j++) { // 先检查行是否存在,不存在则创建 row = sheet.getRow(j + 2); if (row == null) { row = sheet.createRow(j + 2); } cell = row.createCell(1); Date date = response.get(j); if (date == null) { // 设置单元格为空字符串 cell.setCellValue(""); } else { // 非空则转换为字符串写入 cell.setCellValue(date.toString()); } }
方案2:用横线(Hyphen)替代null值
如果需要用-代替空值,只需要把方案1中的cell.setCellValue("");替换成cell.setCellValue("-");即可:
if (date == null) { // 用横线替代null cell.setCellValue("-"); } else { cell.setCellValue(date.toString()); }
额外提示
从ResultSet读取数据的代码是没问题的——ResultSet.getDate("lastresponse")在数据库字段为空时会返回null,这是正常的行为,不需要修改。
内容的提问来源于stack exchange,提问作者Prabu
相关产品推荐
相关产品推荐

