[英]Error while querying for a column in database using spring
我正在尝试查询整个列数据,例如:
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"
不管给定的用户名是否在db中。
在JdbcTemplate,queryForInt,queryForLong, queryForObject中,所有这些方法都希望执行的查询将返回一行且仅返回一行 。 如果没有得到任何行,将导致EmptyResultDataAccessException。
来自EmptyResultDataAccessException的javadoc
当预期结果至少有一行(或元素)但实际上有零行(或元素)时,抛出数据访问异常。
确保您使用的查询应仅返回一行 。
如果根本不可能,请使用查询方法代替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";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.