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 identificaties ondersteunt, moeten updates die de automatisch gegenereerde sleutelfunctie gebruiken werken op een tabel die een IDENTITY kolom bevat. SQL Server staat slechts één IDENTITY kolom per tabel toe. De resultaatset die wordt teruggegeven door de getGeneratedKeys-methode van de SQLServerStatement-klasse heeft slechts één kolom, met de kolomnaam GENERATED_KEYS. Vanaf JDBC Driver 13.6, als gegenereerde sleutels worden opgevraagd voor een instructie die geen IDENTITY waarde genereert, geeft de driver een niet-nul, lege resultaatset terug en ResultSet.next() geeft false.

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