bonjour tout le monde
mon petit soucis , c'est que quand je lance ma jFrame mon table modèle affiche 2 fois la 2eme ligne de ma table Client (elle comporte 2 lignes pour les tests) , pas moyen d'afficher la première , il doit y avoir une erreure dans ma classe
ModeleClient , mais je vois pas , est ce que quelqu'un pourrait m'aider s'il vous plait , encore merci
voici mes classes

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
package modele;
 
 * Classe comportant le modèle de données
import entite.Client;
 
//import javax.swing.table.AbstractTableModel;
public class ModeleClient extends AbstractTableModel {
 
	/**
         * 
         */
	private static final long serialVersionUID = 1L;
	// Propriétés
	// ----------
	// pour récupérer les enreg et les mettre dans le modèle
	Client instanceClient = new Client();
	private ArrayList<Client> lesDonnees = instanceClient.getlesEnreg();
	// les en-têtes de colonnes
	private final String[] lesTitres = { "id_client", "nom", "prenom", "tph",
			"fidelite", "date", "vip" };
 
	// 3 méthodes de l'interface TableModel
	// doivent être obligatoirement définies
	public int getRowCount() {
		return lesDonnees.size();
	}
 
	public int getColumnCount() {
		return lesTitres.length;
	}
 
	// ajout d'une autre méthode de l'interface TableModel
	public String getColumnName(int columnIndex) {
		return lesTitres[columnIndex];
	}
 
	// pour accèder à un objet du modèle
	@SuppressWarnings("static-access")
	public Object getValueAt(int rowIndex, int columnIndex) {
		switch (columnIndex) {
		case 0:
			return lesDonnees.get(rowIndex).getId_client();
		case 1:
			return lesDonnees.get(rowIndex).getNom();
		case 2:
			return lesDonnees.get(rowIndex).getPrenom();
		case 3:
			return lesDonnees.get(rowIndex).getTph();
		case 4:
			return lesDonnees.get(rowIndex).getFidelite();
		case 5:
			return lesDonnees.get(rowIndex).getDate();
		case 6:
			return lesDonnees.get(rowIndex).getVip();
 
		default:
			return null;
		}
	}
 
	// Méthode personnelle
	// pour obtenir le numéro de ligne à partir du code
	// lors d'une recherche dans l'ArrayList
	public int getNumLigne(String vCode) {
		String code = "";
		int numLigne = 0;
		for (int i = 0; i < lesDonnees.size(); i++) {
			lesDonnees.get(i);
			code = Client.getId_client();
			if (code.equals(vCode)) {
				numLigne = i;
			}
		}
		return numLigne;
	}
 
	// Méthodes MOD avec FireXXX
	// -------------------------
	public void creerMOD(Client leClient) {
		lesDonnees.add(leClient);
		// notification d'une création
		fireTableRowsInserted(lesDonnees.size() - 1, lesDonnees.size() - 1);
	}
 
	public void supprimerMOD(int rowIndex) {
		lesDonnees.remove(rowIndex);
		// notification de la suppression
		// de la ligne rowIndex à la ligne rowIndex
		fireTableRowsDeleted(rowIndex, rowIndex);
	}
 
	public void modifierMOD(int firstRow, int lastRow, Client leClient) {
		// set() attend 2 paramètres,
		// le numéro de ligne
		// et l'objet concerné par les modifications
		lesDonnees.set(firstRow, leClient);
		// notification d'une modification
		// (fireTableCellUpdated(firstRow, lastRow);)
		fireTableRowsUpdated(firstRow, lastRow);
	}
 
	// permet de mettre à jour le modèle
	// suite à une nouvelle recherche
	// et d'informer les vues affichant ce modèle
	public void lireRecupMOD(ArrayList<Client> nouvellesDonnees) {
		lesDonnees = nouvellesDonnees;
		fireTableDataChanged();
	}
	 // pour tester
    public static void main(String[] arg) {
        ModeleClient test = new ModeleClient();
        System.out.println("NB de clients : " + test.getRowCount());
        System.out.println("nom du 1er clients : " + test.getValueAt(1, 1));
       // System.out.println("nom du 1er clients : " + test.getValueAt(2, 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
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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
package entite;
 
// pour la connexion à la BD
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
 
import javax.swing.JOptionPane;
 
import controle.Connection_1;
 
 
public class Client  {
    // PROPRIETES
    // ==========
    // Propriété de base de la classe
    // ------------------------------
    private static String id_client;
    private static  String nom;
    private static  String prenom;
    private static int tph;
    private static int fidelite;
    private static Date date;
    private static boolean vip;
    // Propriété pour établir la connexion avec laBD
    // ---------------------------------------------
    private static Connection laConnexion =
            Connection_1.getLaConnectionStatique();
    // Propriété de type ArrayList qui contiendra les
    // enregistrements de la BD
    private final static  ArrayList<Client> lesEnreg = new ArrayList<>();
 
 
 
    public int isCarte_Fidele() {
        return fidelite;
    }
 
    public Date getDate_creation() {
        return date;
    }
    // Getter pour transmetre l'ArrayList
    // ----------------------------------
 
    public ArrayList<Client> getlesEnreg() {
        return lesEnreg;
    }
 
 
    public void setCarte_fidele(int carte_fidele) {
        Client.fidelite = carte_fidele;
    }
 
    public void setDate_creation(Date date_creation) {
        Client.date = date_creation;
    }
 
 
 
    @SuppressWarnings("static-access")
	public Client(String vid_client, String vnom, String vprenom, int vtph,
			int vfidelite, Date vdate, boolean vvip) {
		super();
		this.id_client = vid_client;
		this.nom = vnom;
		this.prenom = vprenom;
		this.tph = vtph;
		this.fidelite = vfidelite;
		this.date = vdate;
		this.vip = vvip;
	}
 
 
 
 
	// 2eme Constructeur
    public Client() {
        // à activer dés création de la méthode
        lireRecupCRUD();
 
    }
 
 
    public static void lireRecupCRUD() {
        try {
            Statement state = laConnexion.createStatement();
            ResultSet rs = state.executeQuery("SELECT * "
                    + "FROM client ORDER BY nom");
            while (rs.next()) {
                String codeJ = rs.getString("id_client");
                String nomJ = rs.getString("nom");
                String prenomJ = rs.getString("prenom");
                int tphJ = rs.getInt("tph");
                int carte_fideleJ =
                        rs.getInt("fidelite");
                Date dateJ = rs.getDate("date");
                boolean vipJ = rs.getBoolean("vip");
                lesEnreg.add(new Client(codeJ, nomJ,
                        prenomJ, tphJ, carte_fideleJ,dateJ,vipJ));
 
            }
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null,
                    "Problème rencontré : " + e.getMessage(),
                    "Résultat", JOptionPane.ERROR_MESSAGE);
        }
    }
 
    public static String getNom() {
		return nom;
	}
 
	public void setNom(String nom) {
		this.nom = nom;
	}
 
	public static String getPrenom() {
		return prenom;
	}
 
	public void setPrenom(String prenom) {
		this.prenom = prenom;
	}
 
	public static int getFidelite() {
		return fidelite;
	}
 
	public void setFidelite(int fidelite) {
		this.fidelite = fidelite;
	}
 
	public static Date getDate() {
		return date;
	}
 
	public void setDate(Date date) {
		this.date = date;
	}
 
	public static Connection getLaConnexion() {
		return laConnexion;
	}
 
	public static void setLaConnexion(Connection laConnexion) {
		Client.laConnexion = laConnexion;
	}
 
	public ArrayList<Client> getLesEnreg() {
		return lesEnreg;
	}
 
	public boolean creerCRUD(String vCode, String vNom, String vPrenom,int vtph,
            int vCarte_fidele, String vDate ,boolean vvip ) {
        boolean bCreation = false;
        String requete = null;
        try {
            requete = "INSERT INTO"
                    + "clients VALUES (?,?,?,?,?)";
            PreparedStatement prepare =
                    laConnexion.prepareStatement(requete);
            prepare.setString(1, vCode);
            prepare.setString(2, vNom);
            prepare.setString(3, vPrenom);
            prepare.setInt(4, vtph);
            prepare.setInt(5, vCarte_fidele);
            prepare.setString(6,vDate);
            prepare.setBoolean(7,vvip);
            prepare.executeUpdate();
            prepare.close();
            bCreation = true;
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null,
                    "Ajout dans la BD effectué : "
                    + e.getMessage(), "Problème rencontré",
                    JOptionPane.ERROR_MESSAGE);
        }
        return bCreation;
 
        ////////////////////////////////////////A FAIRE///////////////////////////////////////////////////////////////////////////////////////////
    }
 
    public boolean modifierCRUD(String vCode, String vNom, String vPrenom,
            int vCarte_fidele, String vDate) {
        boolean bCreation = false;
        String requete = null;
        try {
            requete = "UPDATE clients SET"
                    + " nom = ?,"
                    + " prenom = ?"
                    + " carte_fidele = ?"
                    + " WHERE code = ?";
            PreparedStatement prepare =
                    laConnexion.prepareStatement(requete);
            prepare.setString(1, vNom);
            prepare.setString(2, vPrenom);
            prepare.setInt(3, vCarte_fidele);
            prepare.setString(4, vDate);
            prepare.setString(5, vCode);
            prepare.executeUpdate();
            prepare.close();
            bCreation = true;
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null,
                    "Ajout dans la BD effectué : "
                    + e.getMessage(), "Problème rencontré",
                    JOptionPane.ERROR_MESSAGE);
        }
        return bCreation;
    }
 
    public boolean supprimerCRUD(String vCode) {
        boolean bSuppression = true;
        String requete = null;
        // Vérifier avant qu'il n'existe aucune facture
        try {
            String requeteClient =
                    "SELECT count(*) AS nbLignes FROM factures "
                    + " WHERE code_client LIKE '" + vCode + "'";
            Statement state = laConnexion.createStatement();
            ResultSet jeuEnreg =
                    state.executeQuery(requeteClient);
            int nbLignes = 0;
            jeuEnreg.next();
            nbLignes = jeuEnreg.getInt("nbLignes");
            if (nbLignes > 0) {
                bSuppression = false;
                JOptionPane.showMessageDialog(null,
                        "Il existe des factures pour ce client."
                        + " Suppression interdite.",
                        "Resultat", JOptionPane.ERROR_MESSAGE);
                bSuppression = false;
            } else {
                JOptionPane.showMessageDialog(null,
                        "Aucune facture pour ce client."
                        + " Suppression autorisée.",
                        "Résultat", JOptionPane.INFORMATION_MESSAGE);
            }
        } catch (SQLException e) {
            bSuppression = false;
            JOptionPane.showMessageDialog(null,
                    "Aucune suppression effectuée dans la BD : "
                    + e.getMessage(),
                    "Problème rencontré",
                    JOptionPane.ERROR_MESSAGE);
        }
        if (bSuppression) {
            try {
                requete = "DELETE FROM clients"
                        + "WHERE code = '" + vCode + "'";
                Statement state = laConnexion.createStatement();
                int nbEnregSup = state.executeUpdate(requete);
                if (nbEnregSup == 0) {
                    JOptionPane.showMessageDialog(null,
                            "Aucun enregistrement corespondant.",
                            "Resultat", JOptionPane.ERROR_MESSAGE);
                }
            } catch (SQLException e) {
                bSuppression = false;
                JOptionPane.showMessageDialog(null,
                        "Aucune suppression effectuée dans la BD : "
                        + e.getMessage(),
                        "Problème rencontré",
                        JOptionPane.ERROR_MESSAGE);
            }
        }
        return bSuppression;
    }
 
    public ArrayList<Client> chercherCRUD(String vCode,
            String vNom, String vPrenom) {
        if (vCode.equals("")) {
            vCode = "%";
        }
        if (vNom.equals("")) {
            vNom = "%";
        }
        if (vPrenom.equals("")) {
            vPrenom = "%";
        }
 
        String requete = "SELECT * FROM client"
                + " WHERE id_client LIKE '" + vCode + "'"
                + " AND nom LIKE '" + vNom + "'"
                + " AND prenom LIKE '" + vPrenom + "'";
            try {
            Statement state = laConnexion.createStatement();
            ResultSet rs = state.executeQuery(requete);
            while (rs.next()) {
            	 String codeJ = rs.getString("id_client");
                 String nomJ = rs.getString("nom");
                 String prenomJ = rs.getString("prenom");
                 int tphJ = rs.getInt("tph");
                 int carte_fideleJ =
                         rs.getInt("fidelite");
                 Date dateJ = rs.getDate("date");
                 boolean vipJ = rs.getBoolean("vip");
                 lesEnreg.add(new Client(codeJ, nomJ,
                         prenomJ, tphJ, carte_fideleJ,dateJ,vipJ));
            }
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null,
                    "Problème rencontré : "
                    + e.getMessage(),
                    "Resultat",
                    JOptionPane.ERROR_MESSAGE);
        }
        return lesEnreg;
    }
    public ArrayList<Client> chercherCRUD(String recherche) {
        String requete = "SELECT * FROM clients"
                + " WHERE id_client LIKE '%" + recherche +"%'"
                + " OR nom LIKE '%" + recherche + "%'"
                + " OR prenom LIKE '%" + recherche +"%'";
        try {
            Statement state = laConnexion.createStatement();
            ResultSet rs = state.executeQuery(requete);
            while (rs.next()) {
            	 String codeJ = rs.getString("id_client");
                 String nomJ = rs.getString("nom");
                 String prenomJ = rs.getString("prenom");
                 int tphJ = rs.getInt("tph");
                 int carte_fideleJ =
                         rs.getInt("fidelite");
                 Date dateJ = rs.getDate("date");
                 boolean vipJ = rs.getBoolean("vip");
                 lesEnreg.add(new Client(codeJ, nomJ,
                         prenomJ, tphJ, carte_fideleJ,dateJ,vipJ));
            }
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null,
                    "Problème rencontré : "
                    + e.getMessage(),
                    "Resultat",
                    JOptionPane.ERROR_MESSAGE);
        }
        return lesEnreg;
    }
 
	public static int getTph() {
		return tph;
	}
 
	public void setTph(int tph) {
		this.tph = tph;
	}
 
 
	public boolean getVip() {
		return vip;
	}
 
	public static ArrayList<Client> getLesenreg() {
		return lesEnreg;
	}
 
	public void setVip(boolean vip) {
		this.vip = vip;
	}
 
	public static String getId_client() {
		return id_client;
	}
 
	public void setId_client(String id_client) {
		this.id_client = id_client;
	}
}