Sdílet prostřednictvím


Použití automaticky generovaných klíčů

Stáhnout ovladač JDBC

Ovladač Microsoft JDBC pro SQL Server podporuje volitelná rozhraní API JDBC 3.0 pro načtení automaticky generovaných identifikátorů řádků. Hlavní hodnotou této funkce je poskytnout způsob, jak zpřístupnit hodnoty IDENTITY aplikaci, která aktualizuje tabulku databáze, aniž by vyžadovala dotaz a druhou odezvu na server.

Vzhledem k tomu, že SQL Server nepodporuje pseudosloupce identifikátorů, musí aktualizace, které musí používat funkci automaticky vygenerovaného klíče, pracovat s tabulkou, která obsahuje sloupec IDENTITY. SQL Server umožňuje pouze jeden sloupec IDENTITY na tabulku. Sada výsledků vrácená metodou getGeneratedKeys třídy SQLServerStatement bude mít pouze jeden sloupec s vráceným názvem sloupce GENERATED_KEYS. Pokud jsou vygenerované klíče požadovány v tabulce, která neobsahuje sloupec IDENTITY, ovladač JDBC vrátí sadu výsledků s hodnotou null.

V ukázkové databázi AdventureWorks2025 vytvořte například následující tabulku:

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

V následujícím příkladu se do funkce předá otevřené připojení k ukázkové databázi AdventureWorks2025, vytvoří se příkaz SQL, který přidá data do tabulky a pak se spustí příkaz a zobrazí se hodnota sloupce 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();
    }
}

Viz také

Použití příkazů s ovladačem JDBC