Udostępnij przez


Używanie automatycznie generowanych kluczy

pobierz sterownik JDBC

Sterownik JDBC firmy Microsoft dla programu SQL Server obsługuje opcjonalne interfejsy API JDBC 3.0 do pobierania automatycznie generowanych identyfikatorów wierszy. Główną wartością tej funkcji jest udostępnienie wartości TOŻSAMOŚCI aplikacji aktualizującej tabelę bazy danych bez konieczności wykonywania zapytania i drugiej rundy na serwerze.

Ponieważ program SQL Server nie obsługuje pseudokolumny dla identyfikatorów, aktualizacje, które muszą używać automatycznie wygenerowanej funkcji klucza, muszą działać względem tabeli zawierającej kolumnę IDENTITY. Program SQL Server zezwala tylko na jedną kolumnę IDENTITY na tabelę. Zestaw wyników zwracany przez metodę getGeneratedKeys klasy SQLServerStatement będzie miał tylko jedną kolumnę z zwróconą nazwą kolumny GENERATED_KEYS. Jeśli w tabeli bez kolumny IDENTITY są żądane wygenerowane klucze, sterownik JDBC zwróci zestaw wyników o wartości null.

Na przykład utwórz następującą tabelę w przykładowej bazie danych AdventureWorks2025:

CREATE TABLE TestTable
   (Col1 int IDENTITY,
    Col2 varchar(50),
    Col3 int);  

W poniższym przykładzie do funkcji przekazywane jest otwarte połączenie z przykładową bazą danych AdventureWorks2025. Tworzona jest instrukcja SQL, która dodaje dane do tabeli, następnie zostaje ona uruchomiona, a na końcu wyświetlana jest wartość kolumny 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();
    }
}

Zobacz także

Używanie instrukcji ze sterownikiem JDBC