共用方式為


使用自動產生的金鑰

下載 JDBC 驅動程式

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

另請參閱

搭配 JDBC 驅動程式使用陳述式