Tu es bien gentil, mais qu'est-ce que c'est que ça ?
Bon, alors, par où vais-je commencer ?...
Lorsque vous insérez, modifiez ou supprimez des données dans PostgreSQL, il se passe un événement automatique :
la validation des modifications par le moteur SQL !
C'est aussi simple que ça... Un petit schéma pour visualiser :
Lorsque vous exécutez une requête de type
INSERT,
CREATE,
UPDATE ou
DELETE, ces requêtes modifient les données présentes dans la base. Une fois exécutée, le moteur SQL valide directement ces modifications !
Par contre, vous pouvez avoir la main sur ce point :
Comme ceci, c'est vous qui avez le contrôle sur vos données !
Je ne vois pas l'intérêt de faire ça !
C'est simple : pour pouvoir contrôler
l'intégrité de vos données !
Imaginez que vous devez faire deux requêtes, une modification et une insertion et que vous partez du principe que l'insertion dépend de la mise à jour ! Comment feriez-vous si de mauvaises données étaient mises à jour ? L'insertion qui en découle serait mauvaise...
Ceci, bien sûr, si le moteur SQL valide automatiquement les requêtes faites...
Oui, vu sous cet angle... Comment on gère ça, alors ?
On spécifie au moteur SQL de ne pas valider automatiquement
. Ou plutôt de valider automatiquement les requêtes SQL avec une méthode qui prend un booléen en paramètre, mais
qui ne concernera pas l'objet
Statement,
mais l'objet
Connection :
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Transact {
public static void main(String[] args) {
try {
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://localhost:5432/Ecole";
String user = "postgres";
String passwd = "batterie";
Connection conn = DriverManager.getConnection(url, user, passwd);
conn.setAutoCommit(false);
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
Par contre, lorsque vous voulez que vos requêtes soient prises en compte, il faut utiliser la méthode
conn.commit();
.
En mode setAutoCommit(false);
, si vous ne validez pas vos requêtes, elles ne seront pas prises en compte !
Vous pouvez revenir à tout moment en mode validation automatique avec
setAutoCommit(true);
Voici un exemple :
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 | import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Transact {
public static void main(String[] args) {
try {
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://localhost:5432/Ecole";
String user = "postgres";
String passwd = "batterie";
Connection conn = DriverManager.getConnection(url, user, passwd);
conn.setAutoCommit(false);
Statement state = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String query = "UPDATE professeur SET prof_prenom = 'Cyrille' WHERE prof_nom = 'MAMOU'";
ResultSet result = state.executeQuery("SELECT * FROM professeur WHERE prof_nom = 'MAMOU'");
result.first();
System.out.println("NOM : " + result.getString("prof_nom") + " - PRENOM : " + result.getString("prof_prenom"));
state.executeUpdate(query);
result = state.executeQuery("SELECT * FROM professeur WHERE prof_nom = 'MAMOU'");
result.first();
System.out.println("NOM : " + result.getString("prof_nom") + " - PRENOM : " + result.getString("prof_prenom"));
result.close();
state.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
Vous pouvez exécuter le code autant de fois que vous voulez, vous aurez toujours :
Vous voyez : malgré la requête de mise à jour, celle-ci est inopérante ! Oh oui ! Vous pouvez voir les modifications durant le temps d'exécution du script, mais vu que vous n'avez pas validé les modifications, celles-ci sont annulées à la fin...
Pour que la mise à jour soit effective, il aurait fallu faire un
conn.commit()
avant la fin du script !
Bon, je crois qu'on en a assez vu pour ce chapitre... En route pour le QCM !
