我试图查询整个列数据例如:
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来比较名称是否存在。名称成功到达我的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"
在JdbcTemplate中,queryForInt, queryForLong, queryForObject所有这些方法都期望执行的查询将返回一行且只有一行。如果您没有得到行,将导致EmptyResultDataAccessException。
从javadoc的EmptyResultDataAccessException
当预期结果为at时抛出的数据访问异常至少有一行(或元素),但实际上没有行(或元素)返回。
确保您使用的查询应该只返回一行。
如果不可能,则使用查询方法而不是queryForObject。
提示:要调试它,请直接在SQL IDE 中运行相同的查询
@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";
}