LoginSignup
9
12

More than 3 years have passed since last update.

JavaからMySQLにInsertした際、返り値にAuto_Increment_ID(自動採番値)を取得する

Last updated at Posted at 2019-12-07

はじめに

JDBCを利用して、JavaのコードからDBにレコードをインサートする際、Auto_Increment(オートインクリメント)される値を取得する方法を示す。

SELECT LAST_INSERT_ID()によって、最後に採番された値を取得することができるが、返り値として取得したい場合に利用できる。

使用環境

  • MySQL 8.0
  • Java 8

前提事項

まず、以下のようなデータベース/テーブルを作成する。
- データベース名 : testdb
- テーブル名   : test

ここで、testテーブルにAuto_Incrementの設定を施した主キーであるidカラムChar型のnameカラムを用意する。

テーブルを作成するSQLは以下のとおりである。

CREATE TABLE test(
  id INT NOT NULL AUTO_INCREMENT,
  name CHAR(30) NOT NULL,
  PRIMARY KEY (id)
);

テーブルのカラム情報を確認すると(SHOW COLUMNS FROM テーブル名)、主キーのidカラムにAuto_Incrementが設定されていることがわかる。

Field Type Null Key Default Extra
id int NO PRI NULL auto_increment
name char NO NULL

Auto_Increment_IDの取得方法

まず、Javaのソースを示す。

Test.java
public class Test {

    public static void main(String[] args) {
         int autoIncrementKey = 0;

         try {
         // ドライバロード
         Class.forName("com.mysql.jdbc.Driver");

         // MySQL に接続
         Connection con = DriverManager.getConnection("jdbc:mysql://localhost/testdb?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", "user", "password");

         String sql = "insert into test(name) values (?)";

         // ステートメント生成
         // ここでRETURN_GENERATED_KEYSを設定する
         PreparedStatement stmt = con.prepareStatement(sql, java.sql.Statement.RETURN_GENERATED_KEYS);

         stmt.setString(1, "XXX");
         stmt.executeUpdate();

         // getGeneratedKeys()により、Auto_IncrementされたIDを取得する
         ResultSet res = stmt.getGeneratedKeys();

         if(res.next()){
             autoIncrementKey = res.getInt(1);
         }

         System.out.println(autoIncrementKey);

         res.close();
         stmt.close();
         con.close();

        } catch (Exception e){
            System.out.println(e);
        }
    }

}

PreparedStatementを生成する際、第2引数にjava.sql.Statement.RETURN_GENERATED_KEYSを設定する。

そして、stmt.exceuteUpdate()でInsert文を実行後、stmt.getGeneratedKeys()を実行することで、自動採番されたidを取得することができる。

おわりに

生のJavaやSQLを利用する機会は少ないが、備忘録として。

9
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
12