Utilizzo delle chiavi generate automaticamente

Il driver JDBC per Microsoft SQL Server 2005 supporta le API JDBC 3.0 facoltative per il recupero degli identificatori di righe 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 utilizza 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 seguente tabella nel database di esempio AdventureWorks di SQL Server 2005:

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 {
      String SQL = "INSERT INTO TestTable (Col2, Col3) VALUES ('S', 50)";
      Statement stmt = con.createStatement();
      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.");
      }
      rs.close();
      stmt.close();
   }
   catch (Exception e) {
      e.printStackTrace();
   }
}

Vedere anche

Altre risorse

Utilizzo delle istruzioni con il driver JDBC