【问题标题】:How to solve Empty Result Data Access Exception如何解决空结果数据访问异常
【发布时间】:2019-10-08 04:14:44
【问题描述】:

org.springframework.dao.EmptyResultDataAccessException: 结果大小不正确:预期为 1,实际为 0

NamedParameterJdbcTemplate jdbcTemplate;
@Autowired
public void setJdbcTemplate(NamedParameterJdbcTemplate jdbcTemplate) {
    this.jdbcTemplate = jdbcTemplate;
}
@Override
public UserDetailModel getUserDetail(UserDetailModel detailModel) throws ClassNotFoundException, SQLException {
    StringBuilder query = new StringBuilder();
    Map map = new HashMap();
    SqlParameterSource param;
    query.append(" select ");
    query.append(" bu.FIRST_NAME as 'firstname', bu.LAST_NAME as 'lastname', bu.EMAIL as 'email', MOBILE as 'mobile', bu.ID  as 'id', ");
    query.append(" bu.ENABLED as 'enable', bu.IS_ADMIN as 'isadmin', bu.USERNAME as 'username', bu.PASSWORD as 'password' ");
    query.append(" from bamboo_users bu ");
    query.append(" where upper(trim(bu.USERNAME))=upper(trim(:USERNAME)) ");
    query.append(" AND ENABLED='1' ");
    map.put("USERNAME", detailModel.getUsername());
    param = new MapSqlParameterSource(map);
    return (UserDetailModel) jdbcTemplate.queryForObject(query.toString(), map, new UserRowMappers());
}

【问题讨论】:

  • 从查询字符串中删除\n
  • 什么都没有发生.....同样的错误显示
  • 我知道,这不是解决办法。

标签: spring-mvc jdbctemplate named-parameters


【解决方案1】:

不要使用 throw 关键字,而是自己处理异常。

@Override
public UserDetailModel getUserDetail(UserDetailModel detailModel) {
    try {
        ...
        return (UserDetailModel) jdbcTemplate.queryForObject(query.toString(), map, new UserRowMappers());

    } catch(Exception e) {
        return null;
    }
}

1.将您的查询打印到控制台以查看 SQL 语法是否格式正确。
2.如果您使用的是工作台等客户端程序,请使用您的查询执行。
3.确保您至少有一个数据。

【讨论】:

    【解决方案2】:

    如果有可能得到一个空的结果,使用queryForList并且只在有多个结果时才返回一个值:

    List<UserDetailModel> result = jdbcTemplate.queryForList(query.toString(), map, new UserRowMappers());
    if (result.size>0) {
       return result.get(0)
    }
    return null;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-06
      • 2015-03-24
      • 2014-01-06
      • 2021-03-14
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多