问题描述:
在使用jdbcTemplate.queryForObject()操作数据库时,系统报错如下: 操作代码如下:
@Override
public boolean login(String uname, String pwd) {
boolean flag=false;
String sql="select username,password from tb_user where username=? and password=?";
User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), uname, pwd);
if(user!=null){
flag=true;
}
return flag;
}
原因分析:
从报错截图可以看出,错误由DataAccessUtils中的requiredSingleResult抛出的,我们来看一下这个方法的源码:
public static <T> T requiredSingleResult(Collection<T> results) throws IncorrectResultSizeDataAccessException {
int size = results != null ? results.size() : 0;
if (size == 0) {
throw new EmptyResultDataAccessException(1);
} else if (results.size() > 1) {
throw new IncorrectResultSizeDataAccessException(1, size);
} else {
return results.iterator().next();
}
}
????由源码可知,当results的size为0或者大于1时,会报错,以保证结果返回记录只有一条。 ????我的代码实现的是登录功能,即检查用户名和密码是否正确,即在数据库检索对应的用户数据,如果能找到,则返回true,找不到则返回false;queryForObject()返回结果记录为0,所以报错了。
解决方案:
我们只需要在queryForObject()调用处try-catch捕获异常即可,修正后的代码如下:
@Override
public boolean login(String uname, String pwd) {
boolean flag=false;
String sql="select username,password from tb_user where username=? and password=?";
User user = null;
try {
user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), uname, pwd);
} catch (DataAccessException e) {
e.printStackTrace();
}
if(user!=null){
flag=true;
}
return flag;
}
欢迎指正
|