Jdbctemplate queryforObject .IncorrectResultSizeDataAccessException: неправильный размер результата: ожидаемый 1, фактический 10 - PullRequest
0 голосов
/ 05 октября 2018

Это мой код DAO

@Autowired
    public void setDataSource(DataSource dataSource) {
    this.jdbcTemplate = new JdbcTemplate(dataSource);

    }
    public JSONObject getdata(UserBean userBean)
    {
        JSONObject jsonObject = new JSONObject();
        return this.jdbcTemplate.queryForObject("select username from customer", new RowMapper<JSONObject>() {

            @Override
            public JSONObject mapRow(ResultSet rs, int rowNum) throws SQLException 
            {
                jsonObject.put("username",rs.getString("username"));
                return jsonObject;
            }

        });

    }

Тогда это код моего контроллера

    @SuppressWarnings("unchecked")
    @RequestMapping(value="/doLogin")
    public ModelAndView doLogin(@ModelAttribute @Valid UserBean userBean,BindingResult result)
    {
        ModelAndView view = new ModelAndView("login");
        if(!result.hasFieldErrors())
        {
            if(!combatService.authenticateUser(userBean)) 
            {
                result.addError(new ObjectError("err", "Invalid Credentials"));

            } 
            else
                {
                 if(retrieveService.getdata(userBean) != null)
                 {
                     JSONObject responseArray=new JSONObject();
                     responseArray.put("usernames",retrieveService.getdata(userBean));
                     return new ModelAndView("welcomes", responseArray);
                }   
                }
        }
        return view;
        }

И это ошибка

Ошибка обработки запроса сообщения;вложенное исключение: org.springframework.dao.IncorrectResultSizeDataAccessException: неверный размер результата: ожидается 1, фактический 10

1 Ответ

0 голосов
/ 05 октября 2018

Ваш запрос выполняет прямое увеличение SELECT username FROM customer, то есть этот запрос возвращает ALL имен пользователей.Предположительно, в настоящее время в вашей базе данных 10 записей.

Вам нужно запустить SELECT username FROM customer WHERE (something something).

Вы не вставили свой код UserBean, но предполагаете, что он имеет getUserId()метод, вы бы сделали что-то вроде: return this.jdbcTemplate.queryForObject("select username from customer WHERE userId = ?", new RowMapper<JSONObject>() { ... }, userBean.getUserId()).Обратите внимание, как в конце, после вашего сопоставителя строк, есть новый параметр со значением для вопросительного знака в вашем запросе SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...