2

データベース呼び出しを行うために、春の JdbcDaoSupport を使用しています。データ取得のためにネイティブクエリ(SQLクエリ)を実行したい。ネイティブクエリ用に JdbcTemplate で利用できる API はありますか? queryForObject を使用しましたが、データがない場合は例外をスローしますが、データが見つからない場合は null を返すと予想していました。

4

2 に答える 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 に答える