Automatisch gegenereerde sleutels gebruiken

JDBC-stuurprogramma downloaden

Het Microsoft JDBC-stuurprogramma voor SQL Server ondersteunt de optionele JDBC 3.0-API's om automatisch gegenereerde rij-id's op te halen. De belangrijkste waarde van deze functie is om waarden beschikbaar te maken IDENTITY voor een toepassing die een databasetabel bijwerkt zonder een query en een tweede retour naar de server.

Omdat SQL Server geen pseudokolommen voor id's ondersteunt, moeten updates die de automatisch gegenereerde sleutelfunctie moeten gebruiken, werken met een tabel die een IDENTITY kolom bevat. SQL Server staat slechts één IDENTITY kolom per tabel toe. De resultatenset die wordt geretourneerd door de methode getGeneratedKeys van de klasse SQLServerStatement heeft slechts één kolom, met de geretourneerde kolomnaam van GENERATED_KEYS. Als gegenereerde sleutels worden aangevraagd in een tabel zonder IDENTITY kolom, retourneert het JDBC-stuurprogramma een null-resultatenset.

Maak bijvoorbeeld de volgende tabel in de voorbeelddatabase AdventureWorks2025:

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

In het volgende voorbeeld wordt een open verbinding met de AdventureWorks2025-voorbeelddatabase doorgegeven aan de functie. Er wordt een SQL-instructie samengesteld waarmee gegevens aan de tabel worden toegevoegd, waarna de instructie wordt uitgevoerd en de IDENTITY kolomwaarde wordt weergegeven.

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

Zie ook

Statements gebruiken met de JDBC-driver