INSERT ステートメントの自動生成キーの取り出し
IBM® Data Server Driver for JDBC and SQLJでは、JDBC 3.0 のメソッドを使用することにより、INSERT ステートメントを実行する際に自動生成されるキーを取り出すことができます。
手順
INSERT ステートメントによって生成される自動生成キーを取り出すには、以下のステップを実行する必要があります。
例
ID 列が含まれている表を作成し、その表に 1 つの行を挿入し、ID 列の自動生成キー値を取得するコードを以下に示します。 選択されたステートメントの右にある番号は、前述のステップに対応しています。
import java.sql.*;
import java.math.*;
import com.ibm.db2.jcc.*;
Connection con;
Statement stmt;
ResultSet rs;
java.math.BigDecimal iDColVar;
…
stmt = con.createStatement(); // Create a Statement object
stmt.executeUpdate(
"CREATE TABLE EMP_PHONE (EMPNO CHAR(6), PHONENO CHAR(4), " +
"IDENTCOL INTEGER GENERATED ALWAYS AS IDENTITY)");
// Create table with identity column
stmt.executeUpdate("INSERT INTO EMP_PHONE (EMPNO, PHONENO) " + 1
"VALUES ('000010', '5555')", // Insert a row
Statement.RETURN_GENERATED_KEYS); // Indicate you want automatically
// generated keys
rs = stmt.getGeneratedKeys(); // Retrieve the automatically 2
// generated key value in a ResultSet.
// Only one row is returned.
// Create ResultSet for query
while (rs.next()) {
java.math.BigDecimal idColVar = rs.getBigDecimal(1);
// Get automatically generated key
// value
System.out.println("automatically generated key value = " + idColVar);
}
rs.close(); // Close ResultSet
stmt.close(); // Close Statement
ID 列が含まれている表を作成し、複数行の INSERT ステートメントを使用してその表に 2 つの行を挿入し、ID 列の自動生成キー値を取得するコードを以下に示します。 選択されたステートメントの右にある番号は、前述のステップに対応しています。
import java.sql.*;
import java.math.*;
import com.ibm.db2.jcc.*;
Connection con;
Statement stmt;
ResultSet rs;
…
stmt = con.createStatement();
stmt.executeUpdate(
"CREATE TABLE EMP_PHONE (EMPNO CHAR(6), PHONENO CHAR(4), " +
"IDENTCOL INTEGER GENERATED ALWAYS AS IDENTITY)");
// Create table with identity column
String[] id_col = {"IDENTCOL"};
int updateCount = 1
stmt.executeUpdate("INSERT INTO EMP_PHONE (EMPNO, PHONENO)" +
"VALUES ('000010', '5555'), ('000020', '5556')", id_col);
// Insert two rows
// Indicate you want automatically
// generated keys
rs = stmt.getGeneratedKeys(); // Retrieve the automatically 2
// generated key values in a ResultSet.
// Two rows are returned.
// Create ResultSet for query
while (rs.next()) {
int idColVar = rs.getInt(1);
// Get automatically generated key
// values
System.out.println("automatically generated key value = " + idColVar);
}
stmt.close();
con.close();