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

Le pilote JDBC Microsoft SQL Server prend en charge les API JDBC 3.0 facultatives afin de récupérer automatiquement les identificateurs de lignes générés. La principale utilité de cette fonctionnalité consiste à offrir un moyen de rendre des valeurs IDENTITY disponibles pour une application mettant à jour une table de base de données, sans nécessiter de requête ni de seconde boucle avec le serveur.

Comme SQL Server ne prend pas en charge les pseudo-colonnes pour les identificateurs, les mises à jour devant utiliser une fonctionnalité de clé générée automatiquement doivent fonctionner par rapport à une table contenant une colonne IDENTITY. SQL Server ne permet l'utilisation que d'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, créez la table suivante dans l'exemple de base de données SQL Server 2005 AdventureWorks :

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 AdventureWorks 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 s'affiche.

public static void executeInsertWithKeys(Connection con) {
   try {
      String SQL = "INSERT INTO TestTable (Col2, Col3) VALUES ('S', 50)";
      Statement stmt = con.createStatement();
      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.");
      }
      rs.close();
      stmt.close();
   }
   catch (Exception e) {
      e.printStackTrace();
   }
}

Voir aussi

Autres ressources

Utilisation d'instructions avec le pilote JDBC