17.6.2. Requête de mise à jour (UPDATE, INSERT, DELETE)
La méthode executeUpdate( ) de Statement , ne retourne pas un objet
java.sql.ResultSet mais retourne le nombre de lignes impactées par l'instruction.
Cet exemple supprime de la table ENTREPRISES toutes les entreprises de Seine et Marne.
int count =
stat.executeUpdate(
"DELETE FROM ENTREPRISES WHERE CODEPOST LIKE '77%'");
System.out.println("Il y a eu " + count + " lignes supprimées.");
17.7. Requêtes paramétrées
Pour des raisons d'efficacité et de souplesse de construction des requêtes paramétrés (concaténation
et placer les valeurs entre quotes ou non), le développeur peut utiliser un objet PreparedStatement
pour envoyer des instructions SQL.
L'exemple suivant illustre les deux approches (source : tutoriel jdbc) :
Code Fragment 1:
String updateString = "UPDATE COFFEES SET SALES = 75 " +
"WHERE COF_NAME LIKE 'Colombian'";
stmt.executeUpdate(updateString);
Code Fragment 2:
PreparedStatement updateSales = con.prepareStatement(
"UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? ");
updateSales.setInt(1, 75);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate():
La deuxième version, bien que plus verbeuse, nous permet de mieux structurer nos instructions et
de ne pas gérer la présence ou non de quotes encadrantes.
On constatera l'usage de méthodes setXXX selon le type de l'argument SQL attendu, et que l'appel à
executeUpdate se fait sans argument.
De plus, une requête préparée est toujours compilée par avance côté SGBDR, ce qui accélère son
traitement, surtout en cas d'appels répétés, dans une boucle par exemple.
17.8. Exemple de programme
Le programme ci-dessous utilise une base nommée Refugedb .
Cette base de données contient une table nommée ANIMAL; voici un script de création :
CREATE TABLE ANIMAL (
id INTEGER PRIMARY KEY,
categorie VARCHAR NOT NULL,
nom VARCHAR, race VARCHAR,
sexe CHAR,
date_nais DATE,
id_proprio INTEGER,
present BIT
)
INSERT INTO ANIMAL
VALUES (1,'CRM', 'kiki','berger','M','2000-2-21',21,false)
INSERT INTO ANIMAL
VALUES (2,'CRM','rex','caniche','M','1996-12-2',11,true)