You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用jdbcTemplate.queryForObject抛NullPointerException 库中存在数据如何解决

问题根因

你遇到的java.lang.NullPointerException核心原因是Dao类中的JdbcTemplate未被Spring容器注入,调用其方法时触发空指针。
你定义的private JdbcTemplate jdbcTemplate;没有添加依赖注入注解,Spring不会自动为该属性赋值,执行jdbcTemplate.queryForObject时自然会抛出空指针异常。

修复方案

1. 为JdbcTemplate添加依赖注入

推荐使用构造器注入(Spring 4.3及以上版本单构造器无需额外加@Autowired注解),修改后的Dao类代码如下:

@Transactional
@Repository("daoUser")
public class DaoUser{

    private final JdbcTemplate jdbcTemplate;

    // 构造器注入JdbcTemplate
    public DaoUser(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public UserLogin getUserlogin(final String userid) {
        UserLogin user = new UserLogin();
        try {
            String sql = "SELECT usercode, userid, userpassword, userrole, username, useraccess FROM myschema.userlogin WHERE userid=?";
            Object[] criteria = { userid };
            user = jdbcTemplate.queryForObject(sql, BeanPropertyRowMapper.newInstance(UserLogin.class), criteria);
            
        } catch (Exception e) {
            System.out.println("Error in DaoUser.getUserlogin(final String userid) : " + e);
        }
        return user;
    }
}

如果是旧版本Spring,也可以用字段注入的方式:

@Autowired
private JdbcTemplate jdbcTemplate;

2. 额外检查项

  • 确认Spring配置中已经注册了JdbcTemplate的Bean,且关联的数据源配置正确,可正常连接到对应数据库
  • 你当前的异常处理逻辑会在查询出错/无结果时返回初始化的空UserLogin对象,后续调用该对象的属性时可能出现业务逻辑偏差,建议根据业务需求调整异常处理逻辑,比如无结果时向上层抛出业务异常,而非返回空对象

内容的提问来源于stack exchange,提问作者inquisitive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:24:02