私は 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
例外をスローするのではなく、null を返すだけでよいと思われます。どうすればこれを修正できますか?
ベストアンサー1
JdbcTemplate 、、ではqueryForInt
、queryForLong
このqueryForObject
ようなメソッドはすべて、実行されたクエリが 1 行だけを返すことを想定しています。行が 1 つも取得されない場合、または複数の行が取得される場合は、 になりますIncorrectResultSizeDataAccessException
。正しい方法は、この例外またはをキャッチするのではなくEmptyResultDataAccessException
、使用しているクエリが 1 行だけを返すようにすることです。それが不可能な場合は、代わりに メソッドを使用しますquery
。
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
}