salut
lors de mon application java j'ai eu un problème bizarre exactement lors de la fermeture de connexion avec la base de donnée "access"
jetez un coup d'oeil d'abord sur l'exécution puis le code
l'exécution:
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
connexion au driver...
==>connexion reussie
connexion à la base...
==>connexion reussi
***avant la modification***
recuperation des données
nom : mohamed saleh el3ayyari,numero : 1, email : jadour@9o3r.5om
nom : mahdi ben yeddir,numero : 2, email : finou@hay.net
==>recuperation reussi
***apres la mododification***
recuperation des données
nom : mohamed saleh el3ayyari,numero : 1, email : jadour@9o3r.5om
nom : test,numero : 2, email : finou@hay.net
==>recuperation reussi
erreur de CLOSE() java.sql.SQLException: [Microsoft][Pilote ODBC Microsoft Access]Etat de la transaction non valide
le code celui-ci
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
import java.sql.*;
 
public class bd {
 
	int num;								//parametre de la requete
	String nom,email;
 
	static String log = "";					//parametre de la connexion à la base
	static String pw = "";
	String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
	String url = "jdbc:odbc:supernet_test_pilote_odbc";
	Connection connect;
 
	ResultSet rs;							//parametre pour les requete et les modification de la base
	Statement state;
	PreparedStatement pstate;
	int nb_mod;								 
 
//methode fermer la connexion à la base
	void DBconnectclose(){
		if (connect != null){
			try{
				connect.close();
			}
			catch (SQLException e){
				System.out.println("erreur de CLOSE() " + e);
			}
		}
	}
//methode pour ouvrir la connexion à la base
	void DBconnectopen(String login,String passeword){
		//connexion avec le driver
		System.out.println("connexion au driver...");
		try{
			Class.forName(driver);
			System.out.println("==>connexion reussie");
		}
		catch (ClassNotFoundException e){
			System.out.println("==>erreur de chargement de pilotes : \n" + e);
			System.exit(0);
		}
		//connexion avec la base
		System.out.println("connexion à la base...");
		try{
			connect = DriverManager.getConnection(url,login,passeword);
			state = connect.createStatement();
			connect.setAutoCommit(false);
			System.out.println("==>connexion reussi");
		}
		catch (SQLException e){
			System.out.println("==>erreur de connexion à la base de données : \n" + e);
			System.exit(0);
		}
	}
 
// methode pour les requètes
	void requete(String sql_req){
		System.out.println ("recuperation des données");
		try{
			state = connect.createStatement();
			rs = state.executeQuery(sql_req);
			while (rs.next()) {
			//recuperation les éléments du tuple
				nom = rs.getString(1);
				num  = rs.getInt(2);
				email = rs.getString(3);
				System.out.println ("nom : " + nom + ",numero : " + num + ", email : " + email);
			}
			rs.close();
			state.close();
			System.out.println ("==>recuperation reussi");
		}
		catch(Exception e){
			System.out.println ("==>erreur de recuperation " + e);
		}		
	}
 
 
//methode pour les modification
	void modification(String sql_modification){
		try{		
			state = connect.createStatement();
			//pstate.setInt(1, val);
			//pstate.setString(1, str);
			//pstate.setDate(1, d, gc);
			nb_mod = state.executeUpdate(sql_modification);		//nombre d'enregistrement modifiers
			state.close();
		}
		catch(Exception e){
			System.out.println ("==>erreur ajout " + e);
		}
	}
 
//methode principal	
	public static void main (String arg[]){
		bd test = new bd();
		test.DBconnectopen(log, pw);
		System.out.println ("***avant la modification***");
		test.requete("select nom_cli,N°cli,email_cli from Client;");
		test.modification("update Client set nom_cli = 'test' where N°cli = 2");
		System.out.println ("***apres la mododification***");
		test.requete("select nom_cli,N°cli,email_cli from Client;");
		test.DBconnectclose();
		System.exit(0);
	}
}