Des Suggestions ? Exporter (0) Imprimer
Développer tout

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

 

Le Pilote Microsoft JDBC pour 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 qui ont besoin d'utiliser la fonctionnalité de clé générée automatiquement doivent être appliquées à une table contenant 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, créez la table suivante dans l'exemple de base de données SQL Server 2005AdventureWorks :

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();
   }
}
Afficher:
© 2016 Microsoft