- 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 件のコメント:
コメントを投稿