Utilisation de clés générées automatiquement

Télécharger le pilote JDBC

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 principale utilité de cette fonctionnalité est d’offrir un moyen de rendre des valeurs IDENTITY disponibles pour une application qui met à jour une table de base de données, sans avoir besoin d’une requête ni d’un deuxième aller-retour vers le serveur.

Comme SQL Server ne prend pas en charge les pseudo-colonnes pour les identificateurs, les mises à jour qui doivent utiliser la fonctionnalité de clé générée automatiquement doivent être appliquées à une table qui contient une colonne IDENTITY. SQL Server autorise une seule colonne IDENTITY par table. Le jeu de résultats retourné par la méthode getGeneratedKeys de la classe SQLServerStatement ne comprend qu’une seule colonne dont le nom retourné est GENERATED_KEYS. Si des clés générées sont demandées pour une table ne contenant pas de colonne IDENTITY, le pilote JDBC retourne un jeu de résultats de valeur « null ».

Par exemple, vous pouvez créer la table suivante dans l’exemple de base de données AdventureWorks2022 :

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

Dans l’exemple suivant, une connexion ouverte à l’exemple de base de données AdventureWorks2022 est transmise à la fonction. Une instruction SQL est générée pour ajouter des données à la table, puis l’instruction est exécutée et la valeur de 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();
    }
}

Voir aussi

Utilisation d'instructions avec le pilote JDBC