我正在使用Jdbctemplate从数据库中检索单个String值。这是我的方法。
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; }
在我的情况下,完全可以在查询中不击中,所以我的问题是如何解决以下错误消息。
EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
在我看来,我应该只返回null而不是抛出异常。我怎样才能解决这个问题?提前致谢。
在JdbcTemplate,queryForInt中queryForLong,queryForObject所有这些方法都希望执行的查询将仅返回一行。如果没有行或多于一行,将导致IncorrectResultSizeDataAccessException。现在正确的方法不是捕获此异常或EmptyResultDataAccessException,而是确保你使用的查询仅返回一行。如果根本不可能,则使用query method代替。
JdbcTemplate
queryForInt
queryForLong
queryForObject
IncorrectResultSizeDataAccessException
EmptyResultDataAccessException
query
List<String> strLst = getJdbcTemplate().query(sql,new RowMapper { public Object 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 elements //your wish, you can either throw the exception or return 1st element. }