Exécution d'opérations par lot
Pour améliorer le niveau de performance lors de l'exécution de mises à jour multiples d'une base de données SQL Server, le pilote JDBC Microsoft pour SQL Server permet d'effectuer plusieurs mises à jour sous forme d'une seule unité de travail, appelée également lot.
Les classes SQLServerStatement, SQLServerPreparedStatement et SQLServerCallableStatement sont toutes utilisables pour soumettre des mises à jour par lot. La méthode addBatch permet d'ajouter une commande, la méthode clearBatch d'effacer la liste des commandes et la méthode executeBatch de soumettre toutes les commandes pour traitement. Seules des instructions DDL (Data Definition Language, langage de définition de données) et DML (Data Manipulation Language, langage de manipulation de données) qui retournent un seul nombre de mises à jour peuvent être exécutées dans un lot.
La méthode executeBatch retourne un tableau de valeurs int correspondant au nombre de mises à jour de chaque commande. Si l’une des commandes échoue, une exception BatchUpdateException est levée et vous devez utiliser la méthode getUpdateCounts de la classe BatchUpdateException pour récupérer le tableau de nombres de mises à jour. En cas d'échec d'une commande, le pilote continue à traiter les commandes restantes. Toutefois, si une commande contient une erreur de syntaxe, les instructions contenues dans le lot échouent.
Notes
Si vous n’avez pas besoin d’utiliser les nombres de mises à jour, vous pouvez commencer par émettre une instruction SET NOCOUNT ON auprès de SQL Server. Ceci réduira le trafic réseau et améliorera les performances de votre application.
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, la méthode addBatch est utilisée pour créer les instructions à exécuter et la méthode executeBatch est appelée pour soumettre le lot à la base de données.
public static void executeBatchUpdate(Connection con) {
try {
Statement stmt = con.createStatement();
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('X', 100)");
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Y', 200)");
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Z', 300)");
int[] updateCounts = stmt.executeBatch();
stmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
}