자동 생성 키
자동 생성 키#
자동 생성 키(Auto-generated Keys)란 테이블의 각 행을 유일하게 가리킬 수 있는 값으로, 데이터베이스에서 자동으로 생성된다.
Altibase에서는 시퀀스(sequence)로 자동 생성 키 역할을 할 수 있다. 이 절에서는 JDBC에서 자동 생성 키 값을 얻는 방법을 설명한다.
사용법#
자동 생성 키를 얻기 위해서 먼저 어떤 칼럼에 대해 자동 생성된 키를 얻을 것인지를 명시하는 메소드를 사용해서 Statement 객체를 실행한다. 그리고 getGeneratedKeys() 메소드로 자동 생성된 키의 결과셋을 가져올 수 있다.
또는 어떤 칼럼이 자동 생성된 키 값을 얻을 것인지를 명시하는 메소드를 사용해서 PreparedStatement 객체를 생성하고 실행한 다음, getGeneratedKeys() 메소드로 자동 생성된 키의 결과셋을 가져올 수 있다.
다음은 자동으로 생성된 키를 가져올 수 있는 SQL문을 실행하는 Statement의 메소드들이다.
public boolean execute(String aSql, int aAutoGeneratedKeys) throws SQLException;
public boolean execute(String aSql, int[] aColumnIndexes) throws SQLException;
public boolean execute(String aSql, String[] aColumnNames) throws SQLException;
다음은 자동으로 생성된 키를 가져올 수 있는 PreparedStatement 객체를 생성하는 Connection의 메소드들이다.
public PreparedStatement prepareStatement(String aSql, int aAutoGeneratedKeys) throws SQLException;
public PreparedStatement prepareStatement(String aSql, int[] aColumnIndexes) throws SQLException;
public PreparedStatement prepareStatement(String aSql, String[] aColumnNames) throws SQLException;
위의 두 가지 방법 중 하나를 사용해서 SQL문을 실행한 후, Statement의 아래 메소드를 이용해서 자동 생성된 키를 ResultSet 객체로 얻을 수 있다.
public ResultSet getGeneratedKeys() throws SQLException;
제약 사항#
Altibase에서 자동으로 생성된 키를 얻을 때 아래의 제약 사항이 있다.
-
단순 INSERT 문에 대해서만 지원한다.
-
Altibase는 AUTO INCREMENT 속성의 칼럼을 지원하지 않기 때문에, 오직 시퀀스로부터만 자동 생성 키를 얻을 수 있다.
다음은 자동 생성 키를 얻을 수 있는 SQL문의 예제이다.
INSERT INTO t1 (id, val) VALUES (t1_id_seq.nextval, ?);
다음은 자동 생성 키를 얻을 수 없는 SQL문의 예제이다.
SELECT * FROM t1;
EXEC p1;
자동 생성 키를 만들지 않는 SQL문을 자동 생성 키 생성 플래그(Statement.RETURN_GENERATED_KEYS)와 함께 실행하면 해당 플래그는 무시되고, getGeneratedKeys() 메소드는 빈 결과셋을 반환한다.
예제#
sStmt.executeUpdate(sQstr, Statement.RETURN_GENERATED_KEYS);
ResultSet sKeys = sStmt.getGeneratedKeys();
while (sKeys.next())
{
int sKey = sKeys.getInt(1);
// do somethings...
}
sKeys.close();
sStmt.close();