Mise à jour de ma base de données

Résolu
edgardjok
Messages postés
12
Date d'inscription
samedi 10 novembre 2001
Statut
Membre
Dernière intervention
17 août 2009
- 4 août 2009 à 21:52
cs_nassr
Messages postés
58
Date d'inscription
mardi 28 juillet 2009
Statut
Membre
Dernière intervention
24 mai 2010
- 8 août 2009 à 17:47
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

kirua12
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
8
7 août 2009 à 09:56
pense à mettre des quotes (') autour des valeurs chaines de caractères
3
kirua12
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
8
5 août 2009 à 09:41
Salut,

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

5 août 2009 à 10:52
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kirua12
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
8
5 août 2009 à 11:13
ben, il suffit de faire un delete de la ligne en base lors de l'appel de la méthode supprimerClient.
0
edgardjok
Messages postés
12
Date d'inscription
samedi 10 novembre 2001
Statut
Membre
Dernière intervention
17 août 2009

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

6 août 2009 à 16:46
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
0
kirua12
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
8
6 août 2009 à 17:00
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.
0
edgardjok
Messages postés
12
Date d'inscription
samedi 10 novembre 2001
Statut
Membre
Dernière intervention
17 août 2009

6 août 2009 à 22:45
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();

}

}

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

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

7 août 2009 à 19:27
chapeau l'artiste merci pour ton aide kirual12


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

8 août 2009 à 17:47
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.
0