Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Microsoft JDBC-Treiber für SQL Server unterstützt die optionalen JDBC 3.0-APIs für das Abrufen automatisch generierter Zeilenbezeichner. Der Hauptvorteil dieser Funktion besteht darin, einer Anwendung, die eine Datenbanktabelle aktualisiert, IDENTITY-Werte zur Verfügung zu stellen, ohne dass dafür eine Abfrage und ein zweiter Hin- und Rückweg zum Server erforderlich sind.
Da SQL Server keine Pseudospalten für Bezeichner unterstützt, müssen Aktualisierungen, die das Feature für automatisch generierte Schlüssel verwenden müssen, für eine Tabelle ausgeführt werden, die eine IDENTITY Spalte enthält. SQL Server nur eine einzelne IDENTITY Spalte pro Tabelle zulässt. Das von der getGeneratedKeys-Methode der SQLServerStatement-Klasse zurückgegebene Resultset enthält nur eine Spalte namens GENERATED_KEYS. Wenn generierte Schlüssel für eine Tabelle angefordert werden, die keine IDENTITY Spalte enthält, gibt der TREIBER EINEN NULL-Resultset zurück.
Erstellen Sie beispielsweise die folgende Tabelle in der AdventureWorks2025-Beispieldatenbank:
CREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);
Im folgenden Beispiel wird eine offene Verbindung mit der AdventureWorks2025-Beispieldatenbank an die Funktion übergeben, eine SQL-Anweisung wird erstellt, mit der der Tabelle Daten hinzugefügt werden. Anschließend wird die Anweisung ausgeführt, und der IDENTITY Spaltenwert wird angezeigt.
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();
}
}