Java Web项目调用JDBC查询方法抛出java.lang.NullPointerException求解
空指针异常原因排查
核心触发原因
- 你的
GameDao.getGamingByName方法存在致命逻辑错误:方法内你已经创建了List<Gaming> gaming集合存储查询结果,但是方法最后固定返回null,而不是返回组装好的gaming集合。当页面调用该方法获取列表后直接进行for-each遍历,对null执行迭代操作必然触发空指针异常。
其他可能触发空指针的风险点
- JDBC连接获取失败时
connection为null,后续执行connection.prepareStatement(sql)会直接抛出空指针异常。 - 跳转至编辑页面的请求没有携带
TenSanPham参数时,request.getParameter("TenSanPham")返回null,后续查询、字段赋值逻辑都可能触发空指针。 - 若数据库中对应字段存在
null值,调用rs.getString返回null后直接赋值给Gaming对象的属性,后续前端读取属性时也可能触发空指针。
修复方案
- 修正
getGamingByName方法的返回值:
将方法末尾的return null;修改为return gaming;,即使没有查询到数据也会返回空集合,不会触发遍历空指针。 - 增加非空校验逻辑
- 获取JDBC连接后先判断是否为
null,如果连接为空直接返回空集合并打印错误日志。 - 编辑页获取
TenSanPham参数、gamings列表后先做非空判断,为空时跳转到错误页或者列表页,不执行后续遍历逻辑。
- 可选优化:因为
TENSANPHAM是主键,最多返回1条记录,可以将getGamingByName方法的返回值修改为单个Gaming对象,不用返回集合,减少遍历逻辑的出错概率。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

