Verwenden von automatisch generierten Schlüsseln

Der Microsoft SQL Server JDBC Driver unterstützt die optionalen JDBC 3.0-APIs für den Abruf von automatisch generierten Zeilen-IDs. Der Hauptwert dieses Feature besteht darin, eine Möglichkeit zu bieten, IDENTITY-Werte einer Anwendung zur Verfügung zu stellen, die eine Datenbanktabelle aktualisiert, ohne dass eine Abfrage und ein zweiter Roundtrip zum Server notwendig sind.

Da SQL Server keine Pseudospalten für IDs unterstützt, müssen Aktualisierungen, die das Feature für die automatische Generierung von Schlüsseln verwenden müssen, eine Tabelle verwenden, die eine IDENTITY-Spalte enthält. SQL Server lässt lediglich eine einzige IDENTITY-Spalte pro Tabelle zu. Das von der getGeneratedKeys-Methode der SQLServerStatement-Klasse zurückgegebene Resultset enthält nur eine Spalte mit dem Namen GENERATED_KEYS. Wenn generierte Schlüssel für eine Tabelle ohne IDENTITY-Spalte angefordert werden, gibt der JDBC-Treiber ein leeres Resultset zurück.

Erstellen Sie als Beispiel die folgende Tabelle in der SQL Server 2005 AdventureWorks-Beispieldatenbank:

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

Im folgenden Beispiel wird eine offene Verbindung mit der AdventureWorks-Beispieldatenbank an die Funktion übergeben und eine SQL-Anweisung erstellt. Anschließend werden die Daten der Tabelle hinzugefügt, die Anweisung wird ausgeführt, und der Wert der IDENTITY-Spalte wird angezeigt.

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

Siehe auch

Andere Ressourcen

Verwenden von Anweisungen mit dem JDBC-Treiber