使用spring查询数据库中的列时出错

时间:2016-10-04 21:02:01

标签: java sql spring jdbc

我正在尝试查询整个列数据,例如:

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中都有。

2 个答案:

答案 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);