자동 증가 특성의 컬럼 값 검색

자동 증가 특성

자동 증가 특성(AUTO_INCREMENT)은 자동으로 각 행의 숫자 값을 증가 생성하는 컬럼에 대한 특성으로서, 보다 자세한 사항은 테이블 생성의 컬럼을 참고한다. 수치형 도메인(SMALLINT, INTEGER, DECIMAL(p, 0), NUMERIC(p, 0))에 대해서만 정의할 수 있다.

자동 증가 특성은 JDBC 프로그램에서 자동 생성된 키로 인식되고, 이 키의 검색을 사용하려면 자동 생성된 키 값을 검색할 행을 삽입할 시기를 표시해야 한다. 이를 수행하기 위하여 Connection.prepareStatement, Statement.executeUpdate 또는 Statement.execute 메소드를 호출하여 플래그를 설정해야 한다. 이때, 실행된 명령문은 INSERT 문 또는 INSERT within SELECT 문이어야 하며, 다른 명령문의 경우 JDBC 드라이버가 플래그를 설정하는 매개변수를 무시한다.

수행 단계
  1. 다음 방법 중 하나를 사용하여 자동 생성된 키를 반환하려는지 표시한다. 자동 증가 특성 컬럼을 지원하는 데이터베이스 서버의 클래스에 대해 다음의 양식을 사용하며, 각 양식은 단일 행 INSERT 문에 대해서만 적용 가능하다.
  2. PreparedStatement.getGeneratedKeys 메소드 또는 Statement.getGeneratedKeys 메소드를 호출하여 자동 생성된 키 값이 포함된 ResultSet 오브젝트를 검색한다.

ResultSet에서 자동 생성된 키의 데이터 유형은 해당 도메인의 데이터 유형에 상관 없이 DECIMAL이다.

예제

다음 예제는 자동 증가 특성이 있는 클래스를 생성하고, 데이터를 클래스에 입력하여, 자동 증가 특성 컬럼에 자동 생성된 키 값이 입력되고 해당 키값이 Statement.getGeneratedKeys() 메소드를 통해 정상적으로 검색되는지를 점검하는 예제이다. 앞서 설명한 단계에 해당하는 명령문의 코멘트에 각 단계를 표시하였다.

import java.sql.*;
import java.math.*;
import cubrid.jdbc.driver.*;
 
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 AUTO_INCREMENT)"); // Create table with identity column
                                    
stmt.execute(
"INSERT INTO EMP_PHONE (EMPNO, PHONENO) "
+   "VALUES ('000010', '5555')", 
         // Insert a row  <Step 1>
Statement.RETURN_GENERATED_KEYS);            // Indicate you want automatically
                                     
 
rs = stmt.getGeneratedKeys();    // generated keys
                                       // Retrieve the automatically  <Step 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