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):

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;
 
	}
 
 
}
Version 1.1

(Création d'une connection à chaque instance de Connexion(des centaines de milliers pendant l'importation):

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;
 
	}
 
 
}
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 ^