在使用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"

在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";
}

最新更新