MySQLにはAUTO_INCREMENTという属性を使用すると、新しく追加するレコードを識別するための一意な値を生成できます。
JDBCを使いAUTO_INCREMENTの属性を所持したテーブルに行を追加する場合、その追加したidをJavaで取得できないかと思い、調べた結果をここで記載したいと思います。
目次
前提条件
- Windows XP Pro 32bit
- java 1.7.XX
- MySQL 5.5.XX インストール済み
MySQLの定義
MySQLでは以下のテーブルを作成します。CREATE TABLE hoge ( id INT NOT NULL AUTO_INCREMENT , hoge VARCHAR(45) NULL , PRIMARY KEY (id) );
JDBCでの実装方法
JDBCでの実装方法をサンプルプログラムで説明したいと思います。コネクションは既に取得済みとします。
public int create(KsmAuthorityBean entity) throws SQLException { PreparedStatement statement = null; ResultSet rs = null; int autoIncKey = -1; try { StringBuilder sql = new StringBuilder(); sql.append(" insert into hoge"); sql.append(" ("); sql.append(" hoge"); sql.append(" ) "); sql.append(" values (?) "); //引数にjava.sql.Statement.RETURN_GENERATED_KEYSを指定 //DBコネクションは既に取得ずみとする statement = con.prepareStatement(sql.toString(), java.sql.Statement.RETURN_GENERATED_KEYS); statement.setString(1, "hoge"); //追加 statement.executeUpdate(); //auto-incrementの値取得 rs = statement.getGeneratedKeys(); if (rs.next()) { autoIncKey = rs.getInt(1); } } catch (SQLException e) { throw e; } finally { //ResultSetクローズ if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } //statementクローズ if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } } return autoIncKey; }
0 コメント:
コメントを投稿