INSERT문에 대해 자동 생성 키 검색

IBM® Data Server Driver for JDBC and SQLJ에서 JDBC 메소드를 사용하여 INSERT문을 실행할 때 자동으로 생성되는 키를 검색할 수 있습니다.

프로시저

INSERT문으로 생성되는 자동으로 생성된 키를 검색하려면 다음 단계를 수행해야 합니다.

  1. 다음 메소드 중 하나를 사용하여 자동으로 생성된 키를 리턴하도록 표시하십시오.
    • PreparedStatement.executeUpdate 메소드를 사용하여 행을 삽입하는 경우 다음 Connection.prepareStatement 메소드 양식 중 하나를 호출하여 PreparedStatement 오브젝트를 작성하십시오.

      다음 양식은 ID 컬럼을 지원하는 모든 데이터 소스의 테이블에 대해 유효합니다. sql-statement는 단일 행 INSERT문이어야 합니다.

      제한사항: IBM Data Server Driver for JDBC and SQLJ 버전 3.57 이상의 경우, 다음 양식은 Db2® for z/OS® 데이터 서버의 뷰에 행을 삽입하는 데 유효하지 않습니다.
      Connection.prepareStatement(sql-statement, 
        Statement.RETURN_GENERATED_KEYS);

      다음 양식은 데이터 소스가 SELECT FROM INSERT문을 지원하는 경우에만 유효합니다. sql-statement는 단일 행 INSERT문 또는 다중 행 INSERT문입니다. 첫 번째 양식을 사용하여 자동으로 생성된 키를 사용할 컬럼의 이름을 지정합니다. 두 번째 양식에서 자동으로 생성된 키를 사용하려는 컬럼의 테이블에서 위치를 지정합니다.

      Connection.prepareStatement(sql-statement, String [] columnNames);
      Connection.prepareStatement(sql-statement, int [] columnIndexes);
    • Statement.executeUpdate 메소드를 사용하여 행을 삽입하는 경우, 다음 Statement.executeUpdate 메소드 양식 중 하나를 호출하십시오.

      다음 양식은 ID 컬럼을 지원하는 모든 데이터 소스의 테이블에 대해 유효합니다. sql-statement는 단일 행 INSERT문이어야 합니다.

      제한사항: IBM Data Server Driver for JDBC and SQLJ 버전 3.57 이상의 경우, 다음 양식은 Db2 for z/OS 데이터 서버의 뷰에 행을 삽입하는 데 유효하지 않습니다.
      Statement.executeUpdate(sql-statement, Statement.RETURN_GENERATED_KEYS);

      다음 양식은 데이터 소스가 SELECT FROM INSERT문을 지원하는 경우에만 유효합니다. sql-statement는 단일 행 INSERT문 또는 다중 행 INSERT문입니다. 첫 번째 양식을 사용하여 자동으로 생성된 키를 사용할 컬럼의 이름을 지정합니다. 두 번째 양식에서 자동으로 생성된 키를 사용하려는 컬럼의 테이블에서 위치를 지정합니다.

      Statement.executeUpdate(sql-statement, String [] columnNames);
      Statement.executeUpdate(sql-statement, int [] columnIndexes);
  2. PreparedStatement.getGeneratedKeys 메소드 또는 Statement.getGeneratedKeys 메소드를 호출하여 자동으로 생성된 키 값을 포함하는 ResultSet 오브젝트를 검색하십시오.

    Statement.RETURN_GENERATED_KEYS 매개변수를 포함하는 경우 ResultSet에서 자동으로 생성된 키의 데이터 유형은 해당 컬럼의 데이터 유형에 상관 없이 DECIMAL입니다.

다음 코드는 ID 컬럼이 있는 테이블을 작성하고, 행을 테이블에 삽입하며 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문을 사용하여 두 행을 테이블에 삽입하며, 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();