- 2007年12月30日 22:37
- プログラミング
Javaでデータベースを使ったアプリケーションを開発する時にはJDBCをよく使います。
今日、あるテーブルにデータを挿入するコードを書いていたのですが、データの挿入直後に挿入した列の情報(例えば、オートインクリメントのID)を取得する場合どう書けばよいのかわかりませんでした。きっと初歩的な事なんだろうなぁ・・・。(もしかしたら標準APIでこの機能を実現するものがあるのかも・・)
少し調べた結果、なんとか解決できたのでメモを残しておきます。以下が、データ挿入と挿入した列の情報取得を行うコードです。idとnameカラムを持つhogeテーブルにデータを挿入するinsertHogeメソッドが定義されたクラスです。insertHogeメソッドは、hogeテーブルに新たなnameを登録し、オートインクリメントで割り当てられたidを戻り値として返します。
package dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
/**
* DBのhogeテーブルを扱うクラス
*/
public class HogeDAO {
private static final String SELECT = "SELECT * FROM hoge";
private DataSource ds;
public CTDAO(DataSource ds) {
this.ds = ds;
}
/**
* name(名前)をhogeテーブルに挿入するメソッド
* 戻り値:挿入したデータに割り当てられたid
*/
public int insertHoge(String name) throws SQLException {
int id = -1;
Connection con = ds.getConnection();
Statement s = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = null;
try {
rs = s.executeQuery(SELECT);
rs.moveToInsertRow();
rs.updateString("name", name);
rs.insertRow();
// idの取得
rs.last();
id = rs.getInt("id");
} catch (SQLException ex){
throw ex;
} finally {
rs.close();
s.close();
con.close();
}
return id;
}
}
一応動きましたがもっと上手い書き方ないでしょうか・・?もしかしてこれを実現するメソッドが既に定義されてあったり????