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