bonjour,
j'ai ecrire un code qui me permet de recuperer toutes les informations contenues dans ma base de donnée et les affiche dans une Jtable ,j'ai ecrire une fonction qui me permet de selectionner une ligne et de la supprimer mais le probleme est que lors de la suppression de la ligne ,j'aimerais que ma base de données soit automatiquement mise à jour avec les nouveaux elements contenus dans ma table.
voici mon code
public class ListeClient extends JPanel {
final private static String url = "jdbc:mysql://localhost/db_gestion_veh";
Connection ctx;
Statement stmt;
JButton SupprimerButton;
Vector ligne;
JTable table;
// Construction de l'interface
public ListeClient() {
// Le composant JTable
JTable remplirTable() {
Vector tabLignes=new Vector(), nomCols=new Vector();
int i;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection ctx = DriverManager.getConnection (url,"root","");
// Création d'un objet 'requête'
stmt = ctx.createStatement();
// Définir, envoyer la requête et récupérer le résultat
ResultSet res = stmt.executeQuery("Select * From tableclient");
// Extraire noms des colonnes; les placer dans Vector nomCols
ResultSetMetaData rsmd = res.getMetaData();
nomCols = new Vector();
for( i=1; i<=rsmd.getColumnCount (); i++)
nomCols.add( rsmd.getColumnLabel(i));
// Mémoriser le résultat dans la JTable
while( res.next()) {
// placer les valeurs dans Vector ligne
ligne=new Vector();
for(i=1; i<=7; i++) {
String ch=res.getString(i);
ligne.add(ch);
}
tabLignes.add(ligne);
}
// Fermer la connexion
ctx.close();
}
catch(Exception e) { e.printStackTrace(); }
return new JTable(tabLignes,nomCols);
}
// méthode pour detruire une cellule
private void SupprimerClient(){
((DefaultTableModel)table.getModel()).removeRow(table.getSelectedRow());
}
/** Réflexe associé au clic souris (classe interne)
Un champ mémorise la table swing
*/
class RefSouris extends MouseAdapter {
private JTable table;
RefSouris(JTable t) { table=t; }
public void mouseClicked(MouseEvent e) {
AfficherDonnees();
}
private void AfficherDonnees() {
int i,j, numLigs = table.getRowCount(),
numCols = table.getColumnCount();
//récupère le model de ma table
javax.swing.table.TableModel modele = table.getModel();
a("\nLa table:");
for ( i=0; i < numLigs; i++) {
a("\n ligne " + i + ":");
for ( j=0; j < numCols; j++)
System.out.print(" " + modele.getValueAt(i, j));
}
a("\n");
}
} // fin class RefSouris
/** Utilitaire: affichage */
static void a( String txt) {System.out.print(txt);}
/** Utilitaire: message lié à une exception */
static void a( String txt, Exception e) {
a(txt+" ");
if( e != null) {
a( e.getLocalizedMessage()+"\n --> " + e.toString());
// e.printStackTrace();
}
}
/*********************************************/
} // fin class ListeClient
le probleme est que lorsque je supprime une ligne de mon tableau je veux que cette ligne supprimée disparaisse aussi de ma base données et cé la k je sais pas m'y prendre .
public class ListeClient extends JPanel {
final private static String url = "jdbc:mysql://localhost/db_gestion_veh";
Connection ctx;
Statement stmt;
JButton SupprimerButton;
Vector ligne;
JTable table;
// Construction de l'interface
public ListeClient() {
// Le composant JTable
table = remplirTable();
table.setPreferredScrollableViewportSize(new Dimension(620,70));
JScrollPane panneau = new JScrollPane(table);
add(panneau, BorderLayout.CENTER);
table.addMouseListener( new RefSouris(table) );
SupprimerButton = new JButton("Supprimer Client");
SupprimerButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
SupprimerClient();
}
});
}
});
add(SupprimerButton);
}
public void windowClosing(WindowEvent e){
System.exit(0);
}
/** Requête et résultats dans une JTable */
JTable remplirTable() {
Vector tabLignes=new Vector(), nomCols=new Vector();
int i;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection ctx = DriverManager.getConnection (url,"root","");
// Création d'un objet 'requête'
stmt = ctx.createStatement();
// Définir, envoyer la requête et récupérer le résultat
ResultSet res = stmt.executeQuery("Select * From tableclient");
// Extraire noms des colonnes; les placer dans Vector nomCols
ResultSetMetaData rsmd = res.getMetaData();
nomCols = new Vector();
for( i=1; i<=rsmd.getColumnCount (); i++)
nomCols.add( rsmd.getColumnLabel(i));
// Mémoriser le résultat dans la JTable
while( res.next()) {
// placer les valeurs dans Vector ligne
ligne=new Vector();
for(i=1; i<=7; i++) {
String ch=res.getString(i);
ligne.add(ch);
}
tabLignes.add(ligne);
}
// Fermer la connexion
ctx.close();
}
catch(Exception e) { e.printStackTrace(); }
return new JTable(tabLignes,nomCols);
}
// méthode pour detruire une cellule
private void SupprimerClient(){
((DefaultTableModel)table.getModel()).removeRow(table.getSelectedRow());
}
/** Réflexe associé au clic souris (classe interne)
Un champ mémorise la table swing
*/
class RefSouris extends MouseAdapter {
private JTable table;
RefSouris(JTable t) { table=t; }
public void mouseClicked(MouseEvent e) {
AfficherDonnees();
}
private void AfficherDonnees() {
int i,j, numLigs = table.getRowCount(),
numCols = table.getColumnCount();
//récupère le model de ma table
javax.swing.table.TableModel modele = table.getModel();
a("\nLa table:");
for ( i=0; i < numLigs; i++) {
a("\n ligne " + i + ":");
for ( j=0; j < numCols; j++)
System.out.print(" " + modele.getValueAt(i, j));
}
a("\n");
}
} // fin class RefSouris
/** Utilitaire: affichage */
static void a( String txt) {System.out.print(txt);}
/** Utilitaire: message lié à une exception */
static void a( String txt, Exception e) {
a(txt+" ");
if( e != null) {
a( e.getLocalizedMessage()+"\n --> " + e.toString());
// e.printStackTrace();
}
}
/*********************************************/
} // fin class ListeClient
Vous n’avez pas trouvé la réponse que vous recherchez ?
Ma réponse n'est pas assez précise ??? je vois pas comment la préciser de plus pour faire un delete d'un tuple dans une table avec la clé primaire ?
delete from tableclient where id=?
En supposant que 'id' est le nom de ta clé primaire, le '?' va avoir la valeur de la colonne correspondant à la clé primaire dans la ligne sélectionnée (ou peut être dans le modele du jtable mais non affichée).
le probleme n'est pas de faire un delete dans une table puisque j'ai deja la fonction qui me supprime un client deja ce que je voudrais c'est que lorsque le client selectionné est supprimé en cliquant sur le bouton supprimerClient ,ce changement soit refleté directement dans la base. merci d'avance et c'est gentil de te porter volontaire à mes interrogations
je comprends pas. Tu dis que tu sais faire un delete dans une table, il te suffit d'appeler cette méthode dans supprimerClient. Alors quel est le problème ?
Dans l'ActionListener du bouton supprimerClient, tu exécutes ta requête SQL pour supprimer la ligne sélectionnée.
salut kirual12 je fais comme tu me l'as demandé mais il me met une erreur comme celle ci:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'dd' in 'where clause'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1031)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2548)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1605)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1524)
at traitement.ListeClient.SupprimerClient(ListeClient.java:141)
at traitement.ListeClient.access$0(ListeClient.java:121)
at traitement.ListeClient$1$1.run(ListeClient.java:61)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
voici le code inseré
private void SupprimerClient(){
//((DefaultTableModel)table.getModel()).removeRow(table.getSelectedRow());
// selectionne la ligne et la supprime dans la base de donnée
slt
je pense que le probleme figure dans votre where, vous avez un champ id dans votre table tableClient? alors si oui il suffit d'ecrire
delete from tableclient where id = num
avec num c'est int num = table.getSelectedRow();
// a signaler dans ce cas, tu a la possibilité de supprimer seulement ligne par ligne non pas multiselection.