当前位置: 首页 > 知识库问答 >
问题:

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

艾灿
2023-03-14

我使用Jdbctemplate从数据库中检索单个字符串值。以下是我的方法。

    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

在我看来,我应该返回一个空值,而不是抛出一个异常。我怎么才能修好这个?提前谢了。

共有1个答案

段干弘扬
2023-03-14

在JdbcTemplate、QueryForIntQueryForLongQueryForObject中,所有这些方法都希望执行的查询返回一行,而且只返回一行。如果没有获得任何行或获得多行,这将导致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.    
}
 类似资料: