之前遇到一个问题,用JDBCTemplate写的东西总会提示Incorrect result size: expected 1, actual 0这个错误。
怎么说呢,template.queryForObject()这个方法是返回的必须是一个仅限一个结果!
但是你用实体类去接收的时候,对于刚注册的用户用户名肯定是不重复的,希望返回一个null,再继续进行下面的操作,但是这个东西不会给你返回一个空值,而是直接给你一个如标题所示的错误。
String sql="select * from tab_user where username = ?";
user=template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),username);
想了个办法说用queryFoeList去接收,
template.queryForList(sql,new BeanPropertyRowMapper<User>(User.class),username);
但是获取元素的时候又报错,index 0,get 0,真是难搞。
这时候我们应该用try-catch语句将其捕捉起来,这样就不会出现问题了。
public User findByUsername(String username) {
User user=null;
//创建sql
try{
String sql="select * from tab_user where username = ?";
user=template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),username);
}catch (Exception e){
}
return user;