org.springframework.dao.EmptyResultDataAccessException:错误的结果大小:预期为1,实际为0
NamedParameterJdbcTemplate jdbcTemplate;
@Autowired
public void setJdbcTemplate(NamedParameterJdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public UserDetailModel getUserDetail(UserDetailModel detailModel) throws ClassNotFoundException, SQLException {
StringBuilder query = new StringBuilder();
Map map = new HashMap();
SqlParameterSource param;
query.append(" select ");
query.append(" bu.FIRST_NAME as 'firstname', bu.LAST_NAME as 'lastname', bu.EMAIL as 'email', MOBILE as 'mobile', bu.ID as 'id', ");
query.append(" bu.ENABLED as 'enable', bu.IS_ADMIN as 'isadmin', bu.USERNAME as 'username', bu.PASSWORD as 'password' ");
query.append(" from bamboo_users bu ");
query.append(" where upper(trim(bu.USERNAME))=upper(trim(:USERNAME)) ");
query.append(" AND ENABLED='1' ");
map.put("USERNAME", detailModel.getUsername());
param = new MapSqlParameterSource(map);
return (UserDetailModel) jdbcTemplate.queryForObject(query.toString(), map, new UserRowMappers());
}
答案 0 :(得分:0)
如果有可能得到一个空结果,请使用queryForList
并仅在结果不止一个时返回一个值:
List<UserDetailModel> result = jdbcTemplate.queryForList(query.toString(), map, new UserRowMappers());
if (result.size>0) {
return result.get(0)
}
return null;
答案 1 :(得分:0)
不要使用throw关键字,而是自己处理异常。
@Override
public UserDetailModel getUserDetail(UserDetailModel detailModel) {
try {
...
return (UserDetailModel) jdbcTemplate.queryForObject(query.toString(), map, new UserRowMappers());
} catch(Exception e) {
return null;
}
}
1。将查询打印到控制台,以查看SQL语法是否格式正确。
2.如果您正在使用工作台之类的客户端程序,请使用查询执行。
3.确保您至少有一个数据。