2017-03-28 9 views
1

私の場合、jdbcを正しく使用する方法を知りたいと思います。jdbc.queryForObjectが行を返さない場合の処理​​方法

saveLinkHistoryの列は、mysqlのbit(1)型です。 nameが存在しなかった時には、queryForObject方法は、私は常に、結果として1行を取得することを期待するので、私はIncorrect result size: expected 1, actual 0のエラーを得たまで

public boolean getIsSavedLinkHistory(String name) { 
     String sql = "select saveLinkHistory from users where name = ?"; 
     Boolean isTracked = jdbcTemplateObject.queryForObject(sql, new Object[] { name }, Boolean.class); 
     return isTracked; 
} 

クエリがうまく働きました。

このケースを処理するにはどうすればよいですか?「名前」が存在しないという例外をスローするだけですか? ちなみに、Booleanはここですか?これまで私はそのようなコードを見ていなかったからです。

+0

私の質問には何が問題なのですか? – Oleg

+0

あなたの質問タイトルは実際の問題に関連していないようです。 –

+0

@ MarkRotteveelありがとう、私はそれを変更します – Oleg

答えて

2

JdbcTemplateのqueryForObjectメソッドは、クエリが常に1つの行を返す必要があり、それ以外の場合はEmptyResultDataAccessExceptionをスローします。 queryForObjectの代わりにResultSetExtractorを使用してqueryメソッドを使用できます。 ResultSetExtractor - extractData(ResultSet rs)メソッドは任意の結果オブジェクトを返します。データが返されない場合はnullを返します。ヌルを返す場合は、関連する例外をスローすることができます。

return jdbc.query(sql, new ResultSetExtractor<Boolean>() { 
    @Override 
    public Boolean extractData(ResultSet rs) throws SQLException, 
                DataAccessException { 
     return rs.next() ? rs.getBoolean("column_name") : null; 
    } 
}); 
関連する問題