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();
}
}