자동 생성 키 사용

JDBC 드라이버 다운로드

SQL Server용 Microsoft JDBC Driver는 자동으로 생성된 행 식별자를 검색하기 위한 선택적 JDBC 3.0 API를 지원합니다. 이 기능의 주요한 가치는 쿼리나 서버로의 두 번째 왕복이 필요 없이 데이터베이스 테이블을 업데이트하는 애플리케이션이 IDENTITY 값을 사용할 수 있게 하는 방법을 제공하는 데 있습니다.

SQL Server는 식별자용 의사 열을 지원하지 않으므로, 자동 생성 키 기능을 사용하는 업데이트는 IDENTITY 열이 포함된 테이블을 대상으로 해야 합니다. SQL Server 테이블당 하나의 IDENTITY 열만 허용합니다. SQLServerStatement 클래스의 getGeneratedKeys 메서드가 반환하는 결과 집합은 열 이름GENERATED_KEYS이 인 단 하나의 열만 가지고 있습니다. JDBC 드라이버 13.6부터, 값을 생성 IDENTITY 하지 않는 문장에 대해 생성된 키가 요청되면, 드라이버는 null이 아닌 빈 결과 집합을 반환하고 ResultSet.next() 를 반환합니다 false.

예를 들어 AdventureWorks2025 샘플 데이터베이스에서 다음 테이블을 만듭니다.

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

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

public static void executeInsertWithKeys(Connection con) {
    try(Statement stmt = con.createStatement();) {
        String SQL = "INSERT INTO TestTable (Col2, Col3) VALUES ('S', 50)";
        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.");
        }
    }
    // Handle any errors that may have occurred.
    catch (SQLException e) {
        e.printStackTrace();
    }
}