SORU
15 Mayıs 2012, Salı


Dize için Jdbctemplate sorgu: EmptyResultDataAccessException: Yanlış sonuç boyutu: 1, gerçek 0 beklendiği

Jdbctemplate db tek bir Dize değerini almak için kullanıyorum. Burada benim bir yöntemdir.

    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;
    }

Benim senaryoda benim sorum nasıl aşağıdaki hata iletisini bir çözüm bulabilirim yani benim sorgu üzerinde bir hit almak için DEĞİL tamamlamak mümkündür.

EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0

Sadece bir istisna atmak yerine boş dönmem gerektiğini bana görünüyor. Bu durumu nasıl düzeltebilirim? Şimdiden teşekkürler.

CEVAP
16 Mayıs 2012, ÇARŞAMBA


JdbcTemplate , queryForİnt, queryForLong, queryForObject tüm bu yöntemler idam sorgu, yalnızca bir satır döndürür bekliyor. Hiçbir satır veya IncorrectResultSizeDataAccessException sonucu birden fazla satır varsa . Şimdi doğru yolu bu özel durumu yakalamak değil, ya da EmptyResultDataAccessException ama kullandığınız sorgu tek satır dönmesi gerekir emin olun. Eğer hiç mümkün değilse query yöntemi kullanın.

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.    
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • kalabrandmusic

    kalabrandmus

    25 Kasım 2009
  • OVERWERK

    OVERWERK

    6 Temmuz 2010
  • Plugable

    Plugable

    19 Mayıs 2010