Как решить Исключение Пустого Результата Доступа к Данным - PullRequest
0 голосов
/ 21 мая 2019

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());
}

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

Не используйте ключевое слово 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. убедитесь, что у вас есть данные хотя бы один.

0 голосов
/ 21 мая 2019

, если возможно получить пустой результат, используйте queryForList и возвращайте значение только при наличии более одного результата:

List<UserDetailModel> result = jdbcTemplate.queryForList(query.toString(), map, new UserRowMappers());
if (result.size>0) {
   return result.get(0)
}
return null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...