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番目の引数では返り値の型を指定しています。

