Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Microsoft JDBC-drivrutinen för SQL Server stöder de valfria JDBC 3.0-API:erna för att hämta automatiskt genererade radidentifierare. Huvudvärdet för den här funktionen är att tillhandahålla ett sätt att göra IDENTITY värden tillgängliga för ett program som uppdaterar en databastabell utan att en fråga krävs och en andra tur och retur till servern.
Eftersom SQL Server inte stöder pseudokolumner för identifierare måste uppdateringar som använder den automatiskt genererade nyckelfunktionen fungera mot en tabell som innehåller en IDENTITY kolumn. SQL Server tillåter endast en enskild IDENTITY kolumn per tabell. Resultatmängden som returneras av getGeneratedKeys-metoden i SQLServerStatement-klassen har endast en kolumn, med kolumnnamnet GENERATED_KEYS. Från och med JDBC Driver 13.6, om genererade nycklar begärs för en sats som inte genererar något IDENTITY-värde, returnerar drivrutinen en tom resultatmängd som inte är null, och ResultSet.next() returnerar false.
Skapa till exempel följande tabell i exempeldatabasen AdventureWorks2025:
CREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);
I följande exempel skickas en öppen anslutning till AdventureWorks2025-exempeldatabasen till funktionen, en SQL-instruktion skapas som lägger till data i tabellen och sedan körs -instruktionen IDENTITY och kolumnvärdet visas.
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();
}
}