目次へ

5.3. JdbcTemplate#queryForInt(), queryForLong(), queryForObject()

上述の execute() メソッドでは値を受け取る必要のないステートメントの発行が出来ましたが、データベースを扱うアプリケーションでは単一の値を取得したいことも良くあります。例えば、あるテーブルのレコード数や特定のレコードの特定のカラムの値を取得したいことがあります。JdbcTemplate にはこのような場合に使えるメソッドとして queryForInt(), queryForLong(), queryForObject() メソッドが用意されています。以下に queryForInt(), queryForLong() メソッドのシグニチャを示します。

queryForXxx(String sql)
queryForXxx(String sql, Object[] args)

Xxx の部分には Int, Long, が対応し、これらは返り値の型とも対応しています。例えば queryForInt() は int 型の値を返します。PreparedStatement で使用する "?" で表されるプレースホルダを使用する際は、引数の args でプレースホルダにセットする値の配列を渡します。

以下は queryForObject() メソッドのシグニチャです。

Object queryForObject(String sql, Class requiredType)
Object queryForObject(String sql, Object[] args, Class requiredType)

引数の requiredType には期待される返り値の型を指定します。ここで指定した型と実際の返り値の型が一致しないときには InvalidDataAccessApiUsageException がスローされます。

public class PersonDao {
    private DataSource dataSource = null;

    public int getCount() {
        final String sql = "select count(*) from person";
        JdbcTemplate jt = new JdbcTemplate(this.dataSource);
        return jt.queryForInt(sql);
    }

    public String getFirstNameById(int id) {
        final String sql = "select first_name from person where id=?";
        JdbcTemplate jt = new JdbcTemplate(this.dataSource);
        return (String) jt.queryForObject(sql,
                                          new Object[]{new Integer(id)},
                                          String.class);
    }

    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }
}

getFirstNameById() メソッドでは引数が 3つの queryForObject() を使用し、指定した ID の first_name カラムの値を取得しています。2番目の引数でプレースホルダにセットする値を、3番目の引数では返り値の型を指定しています。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp