Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le pilote Microsoft JDBC pour SQL Server prend en charge les API JDBC 3.0 facultatives afin de récupérer les identificateurs de lignes générés automatiquement. La valeur principale de cette fonctionnalité consiste à fournir un moyen de rendre IDENTITY les valeurs disponibles pour une application qui met à jour une table de base de données sans nécessiter de requête et un deuxième aller-retour vers le serveur.
Comme SQL Server ne prend pas en charge les pseudo-colonnes pour les identifiants, les mises à jour utilisant la fonction clé générée automatiquement doivent fonctionner sur une table contenant une IDENTITY colonne. SQL Server autorise uniquement une seule IDENTITY colonne par table. L’ensemble de résultats retourné par la méthode getGeneratedKeys de la classe SQLServerStatement ne comporte qu’une seule colonne, avec le nom GENERATED_KEYSde colonne . À partir du pilote JDBC 13.6, si des clés générées sont demandées pour une instruction qui ne génère pas de IDENTITY valeur, le pilote retourne un ensemble de résultats vide non nul et ResultSet.next() renvoie false.
Par exemple, créez le tableau suivant dans l’exemple de base de données AdventureWorks2025 :
CREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);
Dans l’exemple suivant, une connexion ouverte à la base de données d’exemple AdventureWorks2025 est transmise à la fonction, une instruction SQL est créée pour ajouter des données à la table, puis l’instruction est exécutée et la valeur de la colonne IDENTITY est affichée.
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();
}
}