データベース呼び出しを行うために、春の JdbcDaoSupport を使用しています。データ取得のためにネイティブクエリ(SQLクエリ)を実行したい。ネイティブクエリ用に JdbcTemplate で利用できる API はありますか? queryForObject を使用しましたが、データがない場合は例外をスローしますが、データが見つからない場合は null を返すと予想していました。
質問する
6134 次
2 に答える
3
でネイティブ SQL を実行するために利用できる多くのオプションがありますJdbcTemplate
。リンクされたドキュメントには、ネイティブ SQL を使用する多くのメソッドと、通常はある種のコールバック ハンドラーが含まれており、探しているものを正確に実現します。頭に浮かぶ単純なものはquery(String sql, RowCallbackHandler callback)
.
jdbcTemplate.query("select * from mytable where something > 3", new RowCallbackHandler() {
public void processRow(ResultSet rs) {
//this will be called for each row. DO NOT call next() on the ResultSet from in here...
}
});
于 2012-08-01T00:37:32.510 に答える
1
Spring JdbcTemplate の queryForObject メソッドは、SQL が正確に 1 行を返すことを想定しています。返される行がない場合、または複数の行が返される場合、org.springframework.dao.IncorrectResultSizeDataAccessException がスローされます。queryForObject の呼び出しを try catch ブロックでラップして IncorrectResultSizeDataAccessException を処理し、例外がスローされた場合は null を返す必要があります。
例えば
try{
return jdbcTemplate.queryForObject(...);
}catch(IncorrectResultSizeDataAccessException e){
return null;
}
于 2012-08-01T05:35:44.680 に答える