Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Sterownik JDBC firmy Microsoft dla programu SQL Server obsługuje opcjonalne interfejsy API JDBC 3.0 do pobierania automatycznie generowanych identyfikatorów wierszy. Główną wartością tej funkcji jest udostępnienie wartości TOŻSAMOŚCI aplikacji aktualizującej tabelę bazy danych bez konieczności wykonywania zapytania i drugiej rundy na serwerze.
Ponieważ program SQL Server nie obsługuje pseudokolumny dla identyfikatorów, aktualizacje, które muszą używać automatycznie wygenerowanej funkcji klucza, muszą działać względem tabeli zawierającej kolumnę IDENTITY. Program SQL Server zezwala tylko na jedną kolumnę IDENTITY na tabelę. Zestaw wyników zwracany przez metodę getGeneratedKeys klasy SQLServerStatement będzie miał tylko jedną kolumnę z zwróconą nazwą kolumny GENERATED_KEYS. Jeśli w tabeli bez kolumny IDENTITY są żądane wygenerowane klucze, sterownik JDBC zwróci zestaw wyników o wartości null.
Na przykład utwórz następującą tabelę w przykładowej bazie danych AdventureWorks2025:
CREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);
W poniższym przykładzie do funkcji przekazywane jest otwarte połączenie z przykładową bazą danych AdventureWorks2025. Tworzona jest instrukcja SQL, która dodaje dane do tabeli, następnie zostaje ona uruchomiona, a na końcu wyświetlana jest wartość kolumny 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();
}
}