Bonjour... je me trouve devant un problème.
Voici comment je faisais avant :
J'avais une classe Connexion qui créait à chaque connexion.execute(String sql) ou connexion.executeUpdate(String sql) une nouvelle Connection vers ma base de données.
Une importation de données à l'aide de java, depuis une ancienne base de données prend alors 50 minutes.
Je me suis dis..ah peut-être si j'utilisais toujours la même Connection !
J'ouvre ma connection qu'une seule fois (Elle est static dans ma classe Connexion) et tout d'un coup... WOW 13 minutes pour mon importation.
Mais gros bémol !
Quand j'exécute des requêtes du genre "Insert","Update","Delete", la base de données ne semble pas vraiment se mettre à jour !!!!
C comme si justement en ayant gardé la même connection j'avais toujours la même référence de la bd et de ses données donc si j'ai fait delete, il y a toujours un tel élément dans mon graphique.
Quelqu'un peut m'aider à savoir quoi faire pour la Connection ???
Voici le code de mes 2 versions :
Version 1.2 (1 seule connexion):
Version 1.1
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 package connexionBD; import java.sql.*; //Cette classe sert à faire la connexion à la base de données Microsoft Access public class Connexion{ private Statement s; private Connection con; private boolean erreur = false; /* * Quand on instancie cette classe, on ouvre une connexion automatiquement. */ public Connexion() { ouvrirConnexion(); } /* * Cette méthode sert à ouvrir une connexion sur la base de données. */ public void ouvrirConnexion(){ try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String dataSourceName = "bd"; String dbURL = "jdbc:odbc:" + dataSourceName; con = DriverManager.getConnection(dbURL); s = con.createStatement(); } catch (Exception err) { System.out.println("ERROR: " + err); erreur=true; } } /* * Cette méthode retourne le résultat d'une requête à la base de données. */ public ResultSet execute(String sql){ ResultSet rs = null; try{ rs = s.executeQuery(sql); }catch(Exception e){ System.out.println(e.getMessage()); System.out.println("***************************************************"); System.out.println("Exécution échouée / The execution failed."); System.out.println(sql); System.out.println("***************************************************"); erreur=true; } return rs; } //Méthode servant à faire une modification à la base de données (UPDATE,DELETE,INSERT) public void executeUpdate(String sql){ try { System.out.println(); System.out.println("**************************"); System.out.println(sql); s.executeUpdate(sql); System.out.println("**************************"); System.out.println(); } catch (SQLException e) { System.out.println("Exécution échouée / The execution failed."); System.out.println(sql); System.out.println(e.getMessage()); e.printStackTrace(); erreur = true; } } /* * Ferme la connexion à la base de données. */ public void fermerConnexion(){ try{ con.close(); s.close(); }catch(Exception e){ System.out.println(e.getMessage()); erreur = true; } } public boolean aDesErreurs(){ return erreur; } }
(Création d'une connection à chaque instance de Connexion(des centaines de milliers pendant l'importation):
J'aimerais bien avoir 1 seule connexion... mais on dirait que certaines requêtes delete ou update ne fonctionnent pas sur la bd quand je suis dans ce mode ^
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
117
118
119
120
121
122 package connexionBD; import java.sql.*; //Cette classe sert à faire la connexion à la base de données Microsoft Access public class Connexion { private Statement s; private static String dataSourceName = "bd"; private static String dbURL = "jdbc:odbc:" + dataSourceName; private static Connection con; private boolean erreur = false; private static boolean ouverte = false; /* * Quand on instancie cette classe, on ouvre une connexion automatiquement. */ public Connexion() { if(!Connexion.ouverte){ Connexion.ouverte= true; try { con = DriverManager.getConnection(dbURL); } catch (SQLException e) { e.printStackTrace(); } } ouvrirConnexion(); } /* * Cette méthode sert à ouvrir une connexion sur la base de données. */ public void ouvrirConnexion(){ try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); s = con.createStatement(); } catch (Exception err) { System.out.println("ERROR: " + err); erreur=true; } } /* * Cette méthode retourne le résultat d'une requête à la base de données. */ public ResultSet execute(String sql){ ResultSet rs = null; try{ rs = s.executeQuery(sql); }catch(Exception e){ System.out.println(e.getMessage()); System.out.println("***************************************************"); System.out.println("Exécution échouée / The execution failed."); System.out.println(sql); System.out.println("***************************************************"); erreur=true; System.exit(0); } return rs; } //Méthode servant à faire une modification à la base de données (UPDATE,DELETE,INSERT) public void executeUpdate(String sql){ try { //System.out.println(); //System.out.println("**************************"); //System.out.println(sql); s.executeUpdate(sql); //System.out.println("**************************"); //System.out.println(); } catch (SQLException e) { System.out.println("Exécution échouée / The execution failed."); System.out.println(sql); System.out.println(e.getMessage()); e.printStackTrace(); erreur = true; System.exit(0); } } /* * Ferme la connexion à la base de données. */ public void fermerConnexion(){ try{ s.close(); }catch(Exception e){ System.out.println(e.getMessage()); erreur = true; } } public boolean aDesErreurs(){ return erreur; } }
Partager