2010/02/03

SQLServerで自動生成キーの取得

SQLServer2005で、IDENTITY値を利用したテーブルに対してInsertを行った場合に、生成されたキーを取得する方法です。いまのプロジェクトではdbutilsを利用しているので、QueryRunnerをオーバーライドして、専用のQueryRunnerを作成しました。

public class GeneratedKeysReturnQueryRunner extends QueryRunner {

@Override
public int update(Connection conn, String sql, Object[] params)
throws SQLException {
PreparedStatement stmt = null;
ResultSet rs = null;
ResultSetMetaData meta = null;
int key = 0;
try {
stmt = this.prepareStatement(conn, sql);
this.fillStatement(stmt, params);
stmt.executeUpdate();
rs = stmt.getGeneratedKeys();
meta = rs.getMetaData();
if (rs.next()) {
key = rs.getInt(meta.getColumnCount());
}
} catch (SQLException e) {
this.rethrow(e, sql, params);
} finally {
close(stmt);
}
return key;
}

@Override
protected PreparedStatement prepareStatement(Connection conn, String sql)
throws SQLException {
return conn.prepareStatement(sql,
PreparedStatement.RETURN_GENERATED_KEYS);
}
}

J2SE1.4以上がサポートしているJDBC 3.0 APIにある、PreparedStatement.RETURN_GENERATED_KEYSを利用するのがポイントです。PostgreSQLやMySQL、Oracleで同じようなことが出来るのかは未検証です。
参考:MSDN 自動生成キーの使用

0 件のコメント:

コメントを投稿