JdbcTemplate的queryForObject查询不到结果会抛异常:
login.jsp提交登录name和pwd到user/login的controller访问dao层的selectByNameAndPwd方法查询结果为空,就在dao层抛了异常所以服务器就报了500

解决方法:dao层向上抛异常,抛到service层try-catch处理:
dao
@Override
public User selectByNameAndPwd(String name, String password) throws EmptyResultDataAccessException {
return jdbcTemplate.queryForObject("select * from sys_user where name = ? and password = ?", new BeanPropertyRowMapper<User>(User.class),name,password);
}
service
@Override
public User login(String name, String password) {
try {
return userDao.selectByNameAndPwd(name, password);
}catch (EmptyResultDataAccessException e){
e.printStackTrace();
return null;
}
}
controller
@RequestMapping("/login")
public String login(String name, String password, HttpSession session){
User user = userService.login(name, password);
if (user!=null){
session.setAttribute("user",user);
return "redirect:/jsp/index.jsp";
}else{
return "redirect:/jsp/login.jsp";
}
}
当使用JdbcTemplate的queryForObject方法查询数据库无结果时,会抛出EmptyResultDataAccessException异常。为避免服务器报500错误,解决方案是在dao层捕获该异常并向上抛到service层处理。在service层用try-catch块包围查询代码,捕获异常后返回null,控制器层再根据返回值判断用户登录状态。
3959

被折叠的 条评论
为什么被折叠?



