gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:25:38 28 4
gpt4 key购买 nike

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

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 文件注入(inject)属性。

我的 Controller

@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;
}

因此,从上面来看,当我尝试从 postman 传递用户名时,它会将值传递给 Controller ​​,然后从那里将其传递给我的 dao 来比较名称是否存在。名称成功到达我的 dao,但是我收到错误。

所以我 try catch 异常

@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

Data access exception thrown when a result was expected to have at least one row (or element) but zero rows (or elements) were actually returned.

确保您使用的查询应仅返回一行

如果根本不可能可能,那么使用查询方法而不是queryForObject。

提示:要对此进行调试,请直接在 SQL IDE 中运行相同的查询。

关于java - 使用 spring 查询数据库中的列时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39861680/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com