Chapter 5。
・JdbcTemplateの便利メソッド
- int queryForInt(String sql)
- int queryForInt(String sql, Object[] args)
- long queryForLong(Stirng sql)
- int queryForLong(String sql, Object[] args)
- Object queryForObject(String sql, Class requiredType)
- Object queryForObject(String sql, Class requiredType, Object[] args)
- List queryForList(String sql)
- List queryForList(String sql, Object[] args)
Objectのやつは型が違うとTypeMismatchDataAccessExceptionをスロー。
ListのやつはDBのカラム名と値のMapをListにしてる。
・JdbcTemplateを使った基本的な問い合わせ
・JdbcTemplateを使った基本的な更新
・JdbcTemplateの進んだ使い方
んー、このままでは使いにくいから使わなさそう・・・。
・RowSetのサポート
JDBC2.0のRowSetサポートしてます。
・RDBMSオペレーションクラス
Springのサンプルもこれ使ってるし、JDBC抽象フレームワークではこれを使うのが
標準的なのかな?
- MappingSqlQueryクラス(select文)
- SqlUpdateクラス(insert文、update文、delete文)
両方ともこんな感じ。(適当です)
class SampleQuery extends MappingSqlQuery {
private static String SQL = "select ID, NAME from SAMPLE where ID = ?";
public SampleQuery(DataSource ds){
super(ds, SQL);
declareParameter(new SqlParameter("ID", Types.INTEGER));
compile();
}
@Override
protected Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Sample sample = new Sample();
sample.setId(rs.getInt("id"));
sample.setName(rs.getString("name"));
return sample;
}
}
コンストラクタでデータソースもらっといて、
それとSQLをスーパークラスのコンストラクタに渡す。
値の型を宣言する。カラムIDがINTEGERとするとこの書き方。
でcompile()を呼び出す。
実行はsampleQuery.execute()。
で、MappingSqlQueryの場合はクエリの実行後に
抽象メソッドmapRow()が呼び出されるので、
今回はResultSetからEntityオブジェクトに値を移しておく。
SqlQueryの場合はなし。