자동 생성 키 사용
SQL Server용 Microsoft JDBC Driver는 자동으로 생성된 행 식별자를 검색하기 위한 선택적 JDBC 3.0 API를 지원합니다. 이 기능의 주된 목적은 쿼리 및 서버에 대한 추가 왕복을 수행하지 않고 데이터베이스 테이블을 업데이트하는 애플리케이션에서 IDENTITY 값을 사용할 수 있도록 하는 것입니다.
SQL Server에서는 식별자에 대해 의사 열을 지원하지 않으므로 자동 생성 키 기능을 사용해야 하는 업데이트는 IDENTITY 열이 포함된 테이블에 대해 작동해야 합니다. SQL Server에서는 테이블당 하나의 IDENTITY 열만 허용됩니다. SQLServerStatement 클래스의 getGeneratedKeys 메서드에 의해 반환되는 결과 집합에는 GENERATED_KEYS라는 하나의 열만 들어 있습니다. IDENTITY 열이 없는 테이블에서 생성된 키가 요청되면 JDBC 드라이버는 null 결과 집합을 반환합니다.
그 예로 AdventureWorks2022 샘플 데이터베이스에 다음 테이블을 만듭니다.
CREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);
다음 예제에서는 AdventureWorks2022 샘플 데이터베이스에 대한 열린 연결이 함수에 전달되고, 테이블에 데이터를 추가하는 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();
}
}