Jdbctemplate query for string: EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
java, jdbctemplate, spring
Solution
In JdbcTemplate , `queryForInt`, `queryForLong`, `queryForObject` all such methods expects that executed query will return one and only one row. If you get no rows or more than one row that will result in `IncorrectResultSizeDataAccessException` . Now the correct way is not to catch this exception or `EmptyResultDataAccessException`, but make sure the query you are using should return only one row. If at all it is not possible then use `query` method instead.
List<String> strLst = getJdbcTemplate().query(sql, new RowMapper<String>() {
public String mapRow(ResultSet rs, int rowNum) throws SQLException {
return rs.getString(1);
}
});
if (strLst.isEmpty()) {
return null;
} else if (strLst.size() == 1) { // list contains exactly 1 element
return strLst.get(0);
} else { // list contains more than 1 element
// either return 1st element or throw an exception
}
Problem
I am using Jdbctemplate to retrieve a single String value from the db. Here is my method. ``` public String test() { String cert=null; String sql = "select ID_NMB_SRZ from codb_owner.TR_LTM_SLS_RTN where id_str_rt = '999' and ID_NMB_SRZ = '60230009999999'"; cert = (String) jdbc.queryForObject(sql, String.class); return cert; } ``` In my scenario it is complete possible to NOT get a hit on my query so my question is how do I get around the following error message. ``` EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0 ``` It would seem to me that I should just get back a null instead of throwing an exception. How can I fix this?