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 IDENTITY hodnoty aplikaci, která aktualizuje tabulku databáze, aniž by vyžadovala dotaz a druhou odezvu na server.

Protože SQL Server nepodporuje pseudosloupce pro identifikátory, aktualizace využívající funkci automaticky generovaného klíče musí fungovat na tabulce, která obsahuje sloupecIDENTITY. SQL Server umožňuje pouze jeden IDENTITY sloupec na tabulku. Výsledná množina vrácená metodou getGeneratedKeys třídy SQLServerStatement má pouze jeden sloupec s názvem GENERATED_KEYSsloupce . Počínaje verzí JDBC Driver 13.6 platí, že pokud jsou pro příkaz, který negeneruje hodnotu IDENTITY, vyžádány generované klíče, ovladač vrátí nenulovou prázdnou sadu výsledků a ResultSet.next() vrátí false.

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 potom se příkaz spustí a IDENTITY zobrazí se hodnota sloupce.

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