2013-07-02 11 views
5

私はJdbcTemplate.query(sql, args, rowMapper)メソッド呼び出しを使用してオブジェクトのリストを返しています。行をスキップして、それを返すリストに追加しない場合があります。このような場合、私は2つのソリューションを考えました:RowMapperがnullを返すときにJdbcTemplateは何をしますか?

  1. RowMapperがnullを返しました。
  2. RowMapperは例外をスローさせます(SQLExceptionsが処理されるので、これが1つの可能性です)。

私の質問は:RowMapper.mapRowがnullを返した場合、JdbcTemplateはそれをリストに追加しますか?そうでない場合は、代わりにSQLExceptionをスローする必要がありますか?

+1

試しましたか? –

+0

sqlのwhere句は行をスキップする必要はありませんか? – Storm

答えて

6

これは、我々はそれが本当にヌルが追加されます見ることができるように、結果リスト

public class RowMapperResultSetExtractor<T> implements ResultSetExtractor<List<T>> { 
    ... 
    public List<T> extractData(ResultSet rs) throws SQLException { 
     List<T> results = (this.rowsExpected > 0 ? new ArrayList<T>(this.rowsExpected) : new ArrayList<T>()); 
     int rowNum = 0; 
     while (rs.next()) { 
      results.add(this.rowMapper.mapRow(rs, rowNum++)); 
     } 
     return results; 
    } 
    ... 

に行を追加するコードの一部です。しかし、RowMapperにバグがない限り、nullを返すべき理由はありません。

+0

これは、結果セットを読み込み、RowMapperを呼び出し、その結果を出力リストに追加するSpring JDBCのコードです。明らかに、RowMapperがnullを返す場合、nullがリストに追加されます。 'ArrayList'は' null'要素を許すので、これはnullが入ったリストを返します。 –

1

nullを返すと、SQLExceptionをスローすると、実際にこのnullがリストに追加されます。また、明示的にtry-catch文を含める必要がないため、RuntimeExceptionを継承するExceptionで「ラップされます」あなたがしたくなければ。

+0

ああ、JdbcTemplateはSQLExceptionだけでなくRuntimeExceptionを処理しますか?知っておいてよかった。 – ktm5124

+0

@ ktm5124私が言いたいことは、スローされたSQLExceptionは、正確に名前がわかりませんが、RuntimeException(検査された例外ではありません)を継承しているため、 catch – morgano

+0

探している例外の名前はDataAccessExceptionです。 –

関連する問題