Mise à jour de ma base de données [Résolu]

Signaler
Messages postés
12
Date d'inscription
samedi 10 novembre 2001
Statut
Membre
Dernière intervention
17 août 2009
-
Messages postés
58
Date d'inscription
mardi 28 juillet 2009
Statut
Membre
Dernière intervention
24 mai 2010
-
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

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

13 réponses

Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
3
pense à mettre des quotes (') autour des valeurs chaines de caractères
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
3
Salut,

et il est où le problème ? message d'erreur ? log ? âge du capitaine ?
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
3
ah, au passage, pense à utiliser la balise code
Messages postés
12
Date d'inscription
samedi 10 novembre 2001
Statut
Membre
Dernière intervention
17 août 2009

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
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
3
ben, il suffit de faire un delete de la ligne en base lors de l'appel de la méthode supprimerClient.
Messages postés
12
Date d'inscription
samedi 10 novembre 2001
Statut
Membre
Dernière intervention
17 août 2009

comment cé de ca k je veux parler elle est vague ta reponse
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
3
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).
Messages postés
12
Date d'inscription
samedi 10 novembre 2001
Statut
Membre
Dernière intervention
17 août 2009

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
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
3
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.
Messages postés
12
Date d'inscription
samedi 10 novembre 2001
Statut
Membre
Dernière intervention
17 août 2009

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

int ligneSelec[] = table.getSelectedRows();


try{

Class.forName("com.mysql.jdbc.Driver").newInstance();

ctx = DriverManager.getConnection(url,"root","");
Statement stmt = ctx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
String req ="";
for(int indexLigne =0; indexLigne < ligneSelec.length; indexLigne ++){

req "delete from tableclient where nom" + table.getValueAt(ligneSelec[indexLigne], 0) ;

stmt.executeUpdate(req);
((DefaultTableModel)table.getModel()).removeRow(table.getSelectedRow());
}




ResultSet rs = stmt.executeQuery("select *from tableclient");
while(rs.next()){
//System.out.println("pseudo : "+rs.getString(1));
//return rs;
}


ctx.close();

}catch (Exception e) {

e.printStackTrace();

}

}

Messages postés
12
Date d'inscription
samedi 10 novembre 2001
Statut
Membre
Dernière intervention
17 août 2009

il ne retrouve pas la colonne 'dd' dans la clause where. 'dd' est la valeur mise dans la premiere colonne du tableau
Messages postés
12
Date d'inscription
samedi 10 novembre 2001
Statut
Membre
Dernière intervention
17 août 2009

chapeau l'artiste merci pour ton aide kirual12


hello world!
Messages postés
58
Date d'inscription
mardi 28 juillet 2009
Statut
Membre
Dernière intervention
24 mai 2010

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.