使用自動產生的金鑰

下載 JDBC 驅動程式

適用於 SQL Server 的 Microsoft JDBC 驅動程式支援選用的 JDBC 3.0 API,來擷取自動產生的資料列識別碼。 此功能的主要價值在於提供一種方式,讓正在更新資料庫資料表的應用程式可取得 IDENTITY 值,而無需進行查詢,也無需再次往返伺服器。

由於 SQL Server 不支援偽欄位作為識別碼,使用自動產生金鑰功能的更新必須針對包含IDENTITY欄位的資料表進行操作。 SQL Server 每個資料表只允許一IDENTITY欄。 SQLServerStatement 類別的 getGeneratedKeys 方法回傳的結果集只有一欄,欄位名稱GENERATED_KEYS為 。 從 JDBC Driver 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();
    }
}