一尘不染

Jdbctemplate查询字符串:EmptyResultDataAccessException:错误的结果大小:预期为1,实际为0

spring

我正在使用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而不是抛出异常。我怎样才能解决这个问题?提前致谢。


阅读 1311

收藏
2020-04-15

共1个答案

一尘不染

JdbcTemplatequeryForIntqueryForLongqueryForObject所有这些方法都希望执行的查询将仅返回一行。如果没有行或多于一行,将导致IncorrectResultSizeDataAccessException。现在正确的方法不是捕获此异常或EmptyResultDataAccessException,而是确保你使用的查询仅返回一行。如果根本不可能,则使用query method代替。

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.    
}
2020-04-15