2013年6月26日水曜日

MySQLでのAuto_IncrementキーのJavaでの取得方法

MySQLにはAUTO_INCREMENTという属性を使用すると、新しく追加するレコードを識別するための一意な値を生成できます。
JDBCを使いAUTO_INCREMENTの属性を所持したテーブルに行を追加する場合、その追加したidをJavaで取得できないかと思い、調べた結果をここで記載したいと思います。

目次

  1. 前提条件
  2. MySQLの定義
  3. JDBCでの実装方法

前提条件

  • 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;
}

Written By : // 13:37
Category:

0 コメント:

コメントを投稿

 

About

このブログは筆者の備忘録として色々記載しています。

Blog Archive

Powered by Blogger.