Bonjour,
j'ai un gros problème avec mon appli, je viens de m'appercevoir que chaque nouvelle requête SQL est plus longue que la précédente. J'utilise exclusivement les ResultSet de JDBC pour mes requêtes sur une base de données Access.
J'ai effectué 3enregistrements consécutifs avec les mêmes données avec un temps d'écart pour être sûr que l'appli a toutes les ressources nécessaires.
Voici le contenu des requêtes :
Le 1er enregistrement dure 1sec, le 2ème 6sec et le 3ème plus d'1mn.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 [ UPDATE Utilisateur SET taille = 1.9, nom = 'Ambre', prenom = 'Benedict', dateNaiss = 662511600000, morphotypeId = 3, sexeId = 1 WHERE id =67; ] [ SELECT id FROM Semaine WHERE utilisateurId=67; ] [ UPDATE Semaine SET poids = 60.0, masseMaigre = 50.0, premierJour = 1195426840576, utilisateurId = 67, objectifId = 3 WHERE id =176; ] [ SELECT id FROM Jour WHERE semaineId=176; ] [ UPDATE Semaine SET poids = 70.0, masseMaigre = 65.0, premierJour = 1194821943296, utilisateurId = 67, objectifId = 2 WHERE id =177; ] [ SELECT id FROM Jour WHERE semaineId=177; ] [ UPDATE Jour SET semaineId = 177, nom = 'Dimanche' WHERE id =217; ] [ SELECT id FROM Repas WHERE jourId=217; ] [ UPDATE Repas SET jourId = 217, heure = 18, nom = 'YUYUYU' WHERE id =267; ] [ SELECT id FROM LignesMenus WHERE repasId=267; ] [ UPDATE LignesMenus SET repasId = 267, alimentId = 9, quantite = 300 WHERE id =340; ] [ UPDATE Jour SET semaineId = 177, nom = 'Jeudi' WHERE id =218; ] [ SELECT id FROM Repas WHERE jourId=218; ] [ UPDATE Repas SET jourId = 218, heure = 14, nom = 'fhgf' WHERE id =268; ] [ SELECT id FROM LignesMenus WHERE repasId=268; ] [ UPDATE LignesMenus SET repasId = 268, alimentId = 5, quantite = 34 WHERE id =341; ] [ UPDATE Jour SET semaineId = 177, nom = 'Lundi' WHERE id =219; ] [ SELECT id FROM Repas WHERE jourId=219; ] [ UPDATE Repas SET jourId = 219, heure = 20, nom = 'DFGFDG' WHERE id =269; ] [ SELECT id FROM LignesMenus WHERE repasId=269; ] [ UPDATE LignesMenus SET repasId = 269, alimentId = 12, quantite = 789 WHERE id =342; ] [ UPDATE Repas SET jourId = 219, heure = 12, nom = 'TUTY' WHERE id =270; ] [ SELECT id FROM LignesMenus WHERE repasId=270; ] [ UPDATE LignesMenus SET repasId = 270, alimentId = 13, quantite = 200 WHERE id =343; ] [ UPDATE Jour SET semaineId = 177, nom = 'Mardi' WHERE id =220; ] [ SELECT id FROM Repas WHERE jourId=220; ] [ UPDATE Repas SET jourId = 220, heure = 10, nom = 'oiu' WHERE id =271; ] [ SELECT id FROM LignesMenus WHERE repasId=271; ] [ UPDATE LignesMenus SET repasId = 271, alimentId = 13, quantite = 200 WHERE id =344; ] [ UPDATE Repas SET jourId = 220, heure = 8, nom = 'oioi' WHERE id =272; ] [ SELECT id FROM LignesMenus WHERE repasId=272; ] [ UPDATE LignesMenus SET repasId = 272, alimentId = 16, quantite = 800 WHERE id =345; ] [ UPDATE Jour SET semaineId = 177, nom = 'Mercredi' WHERE id =221; ] [ SELECT id FROM Repas WHERE jourId=221; ] [ UPDATE Repas SET jourId = 221, heure = 20, nom = 'DFGF' WHERE id =273; ] [ SELECT id FROM LignesMenus WHERE repasId=273; ] [ UPDATE LignesMenus SET repasId = 273, alimentId = 21, quantite = 350 WHERE id =346; ] [ UPDATE Repas SET jourId = 221, heure = 14, nom = 'YUTY' WHERE id =274; ] [ SELECT id FROM LignesMenus WHERE repasId=274; ] [ UPDATE LignesMenus SET repasId = 274, alimentId = 13, quantite = 200 WHERE id =347; ] [ UPDATE Jour SET semaineId = 177, nom = 'Samedi' WHERE id =222; ] [ SELECT id FROM Repas WHERE jourId=222; ] [ UPDATE Repas SET jourId = 222, heure = 10, nom = 'ghgh' WHERE id =275; ] [ SELECT id FROM LignesMenus WHERE repasId=275; ] [ UPDATE LignesMenus SET repasId = 275, alimentId = 13, quantite = 200 WHERE id =348; ] [ UPDATE Jour SET semaineId = 177, nom = 'Vendredi' WHERE id =223; ] [ SELECT id FROM Repas WHERE jourId=223; ] [ UPDATE Repas SET jourId = 223, heure = 16, nom = 'DFGFD' WHERE id =276; ] [ SELECT id FROM LignesMenus WHERE repasId=276; ] [ UPDATE LignesMenus SET repasId = 276, alimentId = 9, quantite = 789 WHERE id =349; ] [ UPDATE Semaine SET poids = 70.0, masseMaigre = 80.0, premierJour = 1193612410880, utilisateurId = 67, objectifId = 3 WHERE id =179; ] [ SELECT id FROM Jour WHERE semaineId=179; ] [ SELECT id FROM AlimentsInterdits WHERE utilisateurId=67; ] [ UPDATE AlimentsInterdits SET utilisateurId = 67, alimentId = 14 WHERE id =57; ] [ UPDATE AlimentsInterdits SET utilisateurId = 67, alimentId = 21 WHERE id =58; ]
Quelqu'un pourrait-il me dire ce qui fait chuter les perfs à cette vitesse svp?
Voici quelques bouts de code qui pourront peut-être vous mettre sur la voie :
Classe Connexion.java :
Classe InterfaceBd.java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 /** * Classe gérant la connexion à la base données selon le pattern Singleton * afin d'éviter une multiplication des connxions et une chute des performances. * @version 1.0 */ public class Connexion { // <editor-fold defaultstate="collapsed" desc=" Champs "> /** Instance du singleton. */ private static Connexion INSTANCE = null; /** Connexion à la base de données.*/ private Connection cnx = null; // </editor-fold> // <editor-fold defaultstate="collapsed" desc=" Constructeurs "> /** * Constructeur privé : permet de supprimer le constructeur public et oblige à passer par la méthode {@link #getInstance()} * pour utiliser la classe. */ private Connexion() { try { cnx = DriverManager.getConnection("jdbc:odbc:Nutrisoft"); } catch (SQLException ex) { System.out.println("Connexion échouée"); ex.printStackTrace(); } } /** Constructeur privé de la classe qui empeche la multiplication d'instances. */ private synchronized static Connexion getInstance() { if (INSTANCE == null) INSTANCE = new Connexion(); return INSTANCE; } // </editor-fold> // <editor-fold defaultstate="collapsed" desc=" Getters & Setters "> /** * Donne la connexion. * @return Connexion. */ public static Connection getCnx() { return getInstance().cnx; } // </editor-fold> }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116 /** * Cette classe gere les interactions avec la base de données. * @version 1.0 */ public abstract class InterfaceBd { // <editor-fold defaultstate="collapsed" desc=" Champs "> /** Statement de la connection. */ private Statement st = null; /** Connexion à la base de données. */ private Connection con = null; // </editor-fold> // <editor-fold defaultstate="collapsed" desc=" Constructeurs "> /** Constructeur. */ public InterfaceBd() { } /** Initialisation de la connexion. */ private void init() { if(con == null) { // Configuration du driver try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // Etablissement de la connexion con = Connexion.getCnx(); } catch(ClassNotFoundException cnfe) { System.out.println("La classe du driver ODBC n'a pas été trouvée"); cnfe.printStackTrace(); } } } // </editor-fold> // <editor-fold defaultstate="collapsed" desc=" Gestion de la bd "> /** * Execute une requete SQL de consultation. * @param rq Requête SQL. * @return Resultat de la requête SQL. */ public ResultSet query(String rq) { System.out.println("[ " + rq + "; ]"); init(); try { st = con.createStatement(); ResultSet res = st.executeQuery(rq); return res; } catch (SQLException ex) { System.out.println("Requete SQL invalide!"); ex.printStackTrace(); return null; } } /** * Execute une requete SQL de mise à jour. * @param rq Requête SQL. */ public void update(String rq) { System.out.println("[ " + rq + "; ]"); init(); try { st = con.createStatement(); st.executeUpdate(rq); } catch (SQLException sqlex) { System.out.println("Requete SQL invalide!"); sqlex.printStackTrace(); } catch(Exception ex) { ex.printStackTrace(); } close(null); } /** * Ferme la connexion. * @param res ResultSet d'une requetet SQL. */ public void close(ResultSet res) { try { if(res != null) res.close(); if(st != null) st.close(); } catch (SQLException ex) { ex.printStackTrace(); } } [..] }
Partager