자동 생성 키 사용

Microsoft SQL Server JDBC 드라이버는 자동으로 생성된 행 식별자를 검색하도록 JDBC 3.0 API(옵션)를 지원합니다. 이 기능의 주된 목적은 쿼리 및 서버에 대한 추가 왕복을 수행하지 않고 데이터베이스 테이블을 업데이트하는 응용 프로그램에서 IDENTITY 값을 사용할 수 있도록 하는 것입니다.

SQL Server에서는 식별자에 대해 의사 열을 지원하지 않으므로 자동 생성 키 기능을 사용해야 하는 업데이트는 IDENTITY 열이 포함된 테이블에 대해 작동해야 합니다. SQL Server에서는 테이블당 하나의 IDENTITY 열만 허용됩니다. SQLServerStatement 클래스의 getGeneratedKeys 메서드에 의해 반환되는 결과 집합에는 GENERATED_KEYS라는 하나의 열만 들어 있습니다. IDENTITY 열이 없는 테이블에서 생성된 키를 요청하는 경우 JDBC 드라이버는 null 결과 집합을 반환합니다.

예를 들어 SQL Server 2005 AdventureWorks 샘플 데이터베이스에 다음과 같은 테이블을 만듭니다.

CREATE TABLE TestTable 
   (Col1 int IDENTITY, 
    Col2 varchar(50), 
    Col3 int);

다음 예제에서는 AdventureWorks 샘플 데이터베이스에 대해 열린 연결을 함수로 전달하고, 테이블에 데이터를 추가하는 SQL 문을 생성한 다음, 해당 문을 실행하고 IDENTITY 열 값을 표시합니다.

public static void executeInsertWithKeys(Connection con) {
   try {
      String SQL = "INSERT INTO TestTable (Col2, Col3) VALUES ('S', 50)";
      Statement stmt = con.createStatement();
      int count = stmt.executeUpdate(SQL, Statement.RETURN_GENERATED_KEYS);
      ResultSet rs = stmt.getGeneratedKeys();

      ResultSetMetaData rsmd = rs.getMetaData();
      int columnCount = rsmd.getColumnCount();
      if (rs.next()) {
         do {
            for (int i=1; i<=columnCount; i++) {
               String key = rs.getString(i);
               System.out.println("KEY " + i + " = " + key);
            }
         } while(rs.next());
      }
      else {
         System.out.println("NO KEYS WERE GENERATED.");
      }
      rs.close();
      stmt.close();
   }
   catch (Exception e) {
      e.printStackTrace();
   }
}

참고

관련 자료

JDBC 드라이버에서 문 사용