Bonsoir à tous,
J'ai un petit problème : comment remplir une base de données mysql à partir d'un combobox ?
Merci bien.
Bonsoir à tous,
J'ai un petit problème : comment remplir une base de données mysql à partir d'un combobox ?
Merci bien.
On peut voir le programme que tu as fais et où tu as des difficultés ?
Tu ajoutes un ActionListener à ton combobox (http://docs.oracle.com/javase/tutori.../combobox.html)
La méthode ActionPerform de ton ActionListener doit insérer une donnée dans ta base de donnée en utilisant JDBC.
Tu vas t'amuser je crois![]()
pour commencer tu recupere la valeur de ton combo avec: (String) JComboBox.getSelectedItem et tu l'enregistre dans ta bd via ta methode d'enregistrement !
Salut tout depend dabord du SGBD que tu utilise. J'ai une classe spéciale pour manipuler les données dans ma BD:
- Sous MySQL j'utilise la classe ci:
Ensuite voilà comment je récupère les données:
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170 package monpackage; import java.sql.*; import java.sql.DriverManager; import com.mysql.jdbc.Connection; import com.mysql.jdbc.Driver; public class ConnectDB { static Connection con = null; static ResultSet resultats = null; private Message msg = new Message(); public ConnectDB() { //************************************************************ //**chargement du pilote try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException e) { msg.error("impossible de charger le pilote jdbc:odbc"); } try { //String DBurl="jdbc:odbc:"+DSN; //String DBurl= "jdbc:mysql://"+params.get(0)+"/"+params.get(3); String DBurl = "jdbc:mysql://ip_seveur/nom_bd"; String login = "root"; String password = ""; Driver monDriver = new com.mysql.jdbc.Driver(); DriverManager.registerDriver(monDriver); con = (Connection) DriverManager.getConnection(DBurl, login, password); } catch (SQLException c) { msg.error("impossible de se connecter au serveur:\nVeuillez vérifier les paramètres de connexion au serveur \ndans le fichier .\\params\\params.ini\n(Adresse/nom du serveur,nom dutilisateur et mot de passe)\n "); System.out.print(c.getMessage()); System.exit(0); } } //**********************Exécute les requêtes de MAJ ds la BD********************************** public void SQLupdate(String req) { try { Statement stmt = con.createStatement(); stmt.executeUpdate(req); msg.dialog("requette executée avec succes"); } catch (SQLException e) { msg.error("Impossible d'executer la requete : \n" + e); } } public void SQLupdateNotResponse(String req) { try { Statement stmt = con.createStatement(); stmt.executeUpdate(req); //msg.dialog("requette executée avec succes"); } catch (SQLException e) { msg.error("Impossible d'executer la requete: \n" + e.getMessage()); } } //************************************************************************ public boolean SQLupdateResponse(String req) { try { Statement stmt = con.createStatement(); stmt.executeUpdate(req); msg.dialog("requette executée avec succes"); return true; } catch (SQLException e) { msg.error("Impossible d'executer la requete: \n" + e.getMessage()); return false; } } //----------------Exécute les requêtes de lecture ds la BD------------ public void SQLquery(String sql) { //execution de la requête try { Statement stmt = con.createStatement(); resultats = stmt.executeQuery(sql); } catch (SQLException e) { msg.error("Impossible d'exécuter la requête" + e.getMessage()); //System.exit(0); } } //****************Retourne le nombre de ligne de la requête**************** public int numRows(String sql) { int nbre = 0; SQLquery(sql); try { //ResultSetMetaData rsmd = resultats.getMetaData(); //int nbCols = rsmd.getColumnCount(); boolean encore = resultats.next(); while (encore) { encore = resultats.next(); nbre++; } resultats.close(); } catch (SQLException e) { msg.error(e.getMessage()); } return nbre; } //*******************Retourne le nombre de colonne d'un requête********************************** public int numCols(String sql) { int nbre = 0; SQLquery(sql); try { ResultSetMetaData rsmd = resultats.getMetaData(); nbre = rsmd.getColumnCount(); resultats.close(); } catch (SQLException e) { msg.error(e.getMessage()); } return nbre; } //***************Retourne une matrice de données (résultat de la requête prise en paramètre) ********************* public String[][] DataQuery(String query) { int rows = numRows(query); int cols = numCols(query); String[][] donnees = new String[rows][cols]; SQLquery(query); try { ResultSetMetaData rsmd = resultats.getMetaData(); int nbCols = rsmd.getColumnCount(); boolean encore = resultats.next(); int numTuple = 0; while (encore) { for (int i = 0; i < nbCols; i++) { donnees[numTuple][i] = resultats.getString(i + 1); } encore = resultats.next(); numTuple++; } resultats.close(); } catch (SQLException e) { msg.error(e.getMessage()); } return donnees; } }
J’espère que sa vas t'aider pose des questions si tu es bloqué
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 //création de l'objet de connexion à la bd ConectDB con =new ConectDB(); //chargement du combobox combo.addItem(""); String[][] data2=null; data2=con.DataQuery("requette"); for(int i=0;i<data2.length;i++){ combo.addItem(data2[i][0]); }
Salut,
Au fait, en utilisant Statement vous vous exposez aux injections du code sql ce qui n'est pas le cas avec l'autre classe!
Non seulement ça, tu peux en apprendre un peu plus en suivant ce lien http://jguillard.developpez.com/JDBC/8.html
Voilà les modifications apportées:
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145 package connexion_bd; import message.Message; import java.sql.*; public class ConectDB { static Connection con = null; static ResultSet resultats = null; private Message msg = new Message(); public ConectDB() { try { Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql://127.0.0.1:5432/Magasin"; String user = "postgres"; String passwd = "keryjames"; con = DriverManager.getConnection(url, user, passwd); } catch (Exception e) { new Message().dialog("Problème de connexion à la base de donnée vérifier le réseau "+e.getMessage()); } } //**********************Exécute les requêtes de MAJ ds la BD********************************** public void SQLupdate(String req) { try { PreparedStatement stmt = con.prepareStatement(req); ((java.sql.PreparedStatement) stmt).executeUpdate(req); // msg.dialog("requette executée avec succes"); } catch (SQLException e) { msg.error("Impossible d'executer la requete : \n" + e); } } public void SQLupdateNotResponse(String req) { try { PreparedStatement stmt = con.prepareStatement(req); ((java.sql.PreparedStatement) stmt).executeUpdate(req); msg.dialog("requette executée avec succes"); } catch (SQLException e) { msg.error("Impossible d'executer la requete: \n" + e.getMessage()); } } //************************************************************************ public boolean SQLupdateResponse(String req) { try { PreparedStatement stmt = con.prepareStatement(req); ((java.sql.PreparedStatement) stmt).executeUpdate(req); msg.dialog("requette executée avec succes"); return true; } catch (SQLException e) { msg.error("Impossible d'executer la requete: \n" + e.getMessage()); return false; } } //----------------Exécute les requêtes de lecture ds la BD------------ public void SQLquery(String sql) { //execution de la requête try { PreparedStatement stmt = con.prepareStatement(sql); resultats = ((java.sql.PreparedStatement) stmt).executeQuery(sql); } catch (SQLException e) { msg.error("Impossible d'exécuter la requête" + e.getMessage()); //System.exit(0); } } //****************Retourne le nombre de ligne de la requête**************** public int numRows(String sql) { int nbre = 0; SQLquery(sql); try { //ResultSetMetaData rsmd = resultats.getMetaData(); //int nbCols = rsmd.getColumnCount(); boolean encore = resultats.next(); while (encore) { encore = resultats.next(); nbre++; } resultats.close(); } catch (SQLException e) { msg.error(e.getMessage()); } return nbre; } //*******************Retourne le nombre de colonne d'un requête********************************** public int numCols(String sql) { int nbre = 0; SQLquery(sql); try { ResultSetMetaData rsmd = resultats.getMetaData(); nbre = rsmd.getColumnCount(); resultats.close(); } catch (SQLException e) { msg.error(e.getMessage()); } return nbre; } //***************Retourne une matrice de données (résultat de la requête prise en paramètre) ********************* public String[][] DataQuery(String query) { int rows = numRows(query); int cols = numCols(query); String[][] donnees = new String[rows][cols]; SQLquery(query); try { ResultSetMetaData rsmd = resultats.getMetaData(); int nbCols = rsmd.getColumnCount(); boolean encore = resultats.next(); int numTuple = 0; while (encore) { for (int i = 0; i < nbCols; i++) { donnees[numTuple][i] = resultats.getString(i + 1); } encore = resultats.next(); numTuple++; } resultats.close(); } catch (SQLException e) { msg.error(e.getMessage()); } return donnees; } }
Modifier le code oui, mais comment le modifier?
Là, aucune de tes méthodes ne fonctionnera avec cet usage de PreparedStatement (sauf si les requêtes en paramètre de celles ci ne contiennent pas des paramètres). La raison, tu passes en paramètre des requêtes qui vont être exécutées en utilisant PreparedStatement alors que tu ne passes pas des valeurs pour les paramètres de ces requêtres.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager