Uso delle chiavi generate automaticamente

Download scaricare ildriver JDBC

Microsoft JDBC Driver per SQL Server supporta le API di JDBC 3.0 facoltative per il recupero degli identificatori di riga generati automaticamente. Il valore principale di questa funzionalità è di consentire la disponibilità dei valori IDENTITY all'applicazione con la quale si sta aggiornando una tabella di database senza richiedere una query e un secondo round trip al server.

Poiché SQL Server non supporta pseudocolonne per gli identificatori, gli aggiornamenti per i quali si usa la funzionalità di generazione automatica delle chiavi funzionano solo in una tabella che contiene una colonna IDENTITY. SQL Server consente una singola colonna IDENTITY per tabella. Il set di risultati restituito dal metodo getGeneratedKeys della classe SQLServerStatement conterrà una sola colonna, con GENERATED_KEYS come nome di colonna restituito. Se le chiavi generate vengono richieste in una tabella che non contiene la colonna IDENTITY, il driver JDBC restituirà un set di risultati con valore Null.

Come esempio viene creata la tabella seguente nel database di esempio AdventureWorks:

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

Nell'esempio seguente viene passata alla funzione una connessione aperta al database di esempio AdventureWorks, viene costruita un'istruzione SQL che consentirà di aggiungere i dati alla tabella, quindi l'istruzione viene eseguita e viene visualizzato il valore della colonna 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();
    }
}

Vedere anche

Uso delle istruzioni con il driver JDBC