这是我的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
答案 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查询中问号的值。