使用自動產生的金鑰
適用於 SQL Server 的 Microsoft JDBC 驅動程式支援選用的 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();
}
}