Jdbctemplate queryforObject .IncorrectResultSizeDataAccessException:错误的结果大小:预期为1,实际为10

时间:2018-10-05 11:46:52

标签: java json spring-mvc jdbctemplate

这是我的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 :(得分:0)

您的查询直接进行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())。请注意,在rowmapper的末尾,如何有一个新参数,其中包含SQL查询中问号的值。