我正在尝试查询整个列数据,例如:
SELECT USER_USERNAME FROM xxxx WHERE USER_USERNAME=?
我收到错误
org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
我的道
@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"
无论用户名是否在db中都有。
答案 0 :(得分:1)
在JdbcTemplate中,queryForInt,queryForLong, queryForObject 所有此类方法都希望执行的查询 返回一行且只有一行。 如果没有任何行将导致EmptyResultDataAccessException。
来自EmptyResultDataAccessException的javadoc
当预期结果为时,抛出数据访问异常 至少有一行(或元素)但实际上是零行(或元素) 返回。
确保您使用的查询应该只返回一行。
如果可能不那么使用查询方法而不是queryForObject。
提示:要对此进行调试,请在SQL IDE 直接中运行相同的查询。
答案 1 :(得分:0)
restart:
gcollect:=(expr,t)->
thaw(collect(algsubs(t=freeze(t),
expand(expr)),freeze(t),_rest)):
f := a*(a*k+b*k+c)+b*(b*k+c*k+a)+c*(a*k+c*k+b):
gcollect(f, a^2+b^2+c^2);
gcollect(f, a^2+b^2+c^2, expand);
gcollect(f, a^2+b^2);
gcollect(f, a^2+b^2, expand);