2016-10-04 5 views
0

Я пытаюсь запросить всю информацию столбца для например:Ошибка при запросе столбца в базе данных с помощью пружины

SELECT USER_USERNAME FROM xxxx WHERE USER_USERNAME=? 

Я получаю ошибку

org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0 

Мой Dao

@Override 
public String getAllUsers(UserRegistration uname) { 
    System.out.println(uname.getUserName()); 

    return template.queryForObject(GET_USER_USERNAME, new Object[] { uname.getUserName() }, 
      new BeanPropertyRowMapper<String>(String.class)); 

} 

Я ввожу свойства через файл xml.

моего контроллер

@RequestMapping(method = RequestMethod.POST,value = "/checkUserName", headers = "Accept=application/json") 
public org.weber.nag.model.UserRegistration checkUserName(@RequestBody org.weber.nag.model.UserRegistration userReg) { 
    userDao.getAllUsers(userReg); 
    return userReg; 
} 

Так из сказанных выше, когда я пытаюсь передать имя пользователя от почтальона он принимает значения в контроллер, а оттуда я передаю его к моему дао, чтобы сравнить ли выезды имени или нет. Имя успешно достигает моего dao, но я получаю сообщение об ошибке.

Так что я попытался поймать исключение

@Override 
public String getAllUsers(UserRegistration uname) { 
    System.out.println(uname.getUserName()); 
    try { 
     return template.queryForObject(GET_USER_USERNAME, new Object[] { uname.getUserName() }, 
       new BeanPropertyRowMapper<String>(String.class)); 
    } catch (EmptyResultDataAccessException e) { 
     System.out.println("uname already exists"); 
     return "user exists"; 
    } 


} 

Но каждый раз он печатает

"uname already exists" 

независимо от имени пользователя данного ли он есть в БД или нет.

ответ

1

В JdbcTemplate, queryForInt, queryForLong, queryForObject все такие методы ожидает, что выполняется запрос будет возврата один и только один ряд. Если у вас нет строк, которые приведут к исключению EmptyResultDataAccessException.

С javadoc из EmptyResultDataAccessException

исключения доступа к данным, когда выбрасываются, как ожидается, в результате иметь по крайней мере один ряд (или элемент), но нулевые строки (или элементы) было фактически возвращен.

Убедитесь, что запрос, который вы используете, должен возвращать только одну строку.

Если вообще это не можно затем использовать метод запроса вместо queryForObject.

Совет: Для отладки этого запустите один и тот же запрос в SQL IDE непосредственно.

+0

Используемый запрос для объекта, и он был выполнен. Благодарю вас. – mark

0
@Override 
public String getAllUsers(UserRegistration uname) { 
    try { 
     template.queryForObject(GET_USER_USERNAME, new Object[] { uname.getUserName() }, 
       new BeanPropertyRowMapper<String>(String.class)); 
     System.out.println("uname exists"); 
     return "user name is NOT available."; 
    } catch (EmptyResultDataAccessException e) { 
     System.out.println("uname do not exists"); 
    } 

    return "user is available"; 

} 
Смежные вопросы