IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Mettre à jour une base des données à partir d'une JTable


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Djibouti

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 32
    Points : 15
    Points
    15
    Par défaut Mettre à jour une base des données à partir d'une JTable
    Bonjour,

    J'ai une table qui me permet d'ajouter les valeurs dans ma base des données, et je souhaiterais modifier les valeurs de cette table et mettre à jour ma base des données, mais je n'arrive pas à le faire
    Svp quelqu'un pourra m'aider.
    Merci d'avance.

    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
    enregistrer.addActionListener(new ActionListener(){
    			    	public void actionPerformed(ActionEvent e) 
    			    	{
    			    		int row = table.getSelectedRow();
    			    		int col = table.getSelectedColumn();
    				          try {
     
    							preStat =(PreparedStatement) connexion.prepareStatement("UPDATE impaye SET Date = ?, Débiteur = ?, Montant = ?, Impayé = ? "+row);
    							//preStat.setString(0, (String) table.getValueAt(row, 0));
    							//preStat.setString(1, (String) table.getValueAt(row, 1));
    							//preStat.setInt(2, (Integer) table.getValueAt(row, 2));
    							preStat.setString(col, (String) table.getValueAt(row, 3));
     
    				        	 preStat.executeUpdate();
    				        	 preStat.close();
    				          } catch (SQLException insertException) {
    				        	   System.out.println("Error:"+insertException.getMessage());
    				          }
    				        }
     
    				      });

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Points : 68
    Points
    68
    Par défaut
    Bonsoir,

    La prochaine fois mets ton code entre les balises CODE parce que c'est pas très lisible

    Sinon, si j'ai bien compris ton problème, tu devrais plutôt utiliser un CellEditorListener :

    https://docs.oracle.com/javase/7/doc...rListener.html

    et tu fais ton envoi ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void 	editingStopped(ChangeEvent e){
    //Mets ton try/catch ici
    }

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Djibouti

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    J'ai modifié mon code, mais j'ai cette erreur : Error:SQL String can not be NULL

    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
    <enregistrer.addActionListener(new ActionListener(){
    			    	public void actionPerformed(ActionEvent e) 
    			    	{
    			    		int row = table.getSelectedRow();
    			    		int col = table.getSelectedColumn();
    			    		String sql = null;
    				          try {
    							if(col==4)
    								sql = "UPDATE impaye" + "SET Impayé = ?" + "WHERE ID = ? "+ row;
     
     
    								preStat =(PreparedStatement) connexion.prepareStatement(sql);
    								preStat.setObject(1, table.getValueAt(row, col));
    								preStat.executeUpdate();
    					    			preStat.close();
     
    				          } catch (SQLException insertException) {
    				        	   System.out.println("Error:"+insertException.getMessage());
    				          }
     
    				        }
     
    				      });>

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    Ton erreur est simple, tu initialises ta variable SQL avant le try (c'est bien mais tu te fais piéger du coup):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(col==4)
    sql = "UPDATE impaye" + "SET Impayé = ?" + "WHERE ID = ? "+ row;
    Ici c'est comme si tu avais fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(col==4){
      sql = "UPDATE impaye" + "SET Impayé = ?" + "WHERE ID = ? "+ row;
    }
    donc quand tu n'es pas à la "col 4" ton code continue de s'exécuter avec sql == null, alors soit tu as oublié les accolades sur tout le try :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if(col==4){//Accolade du if, si elles y sont pas, il ne prend que la ligne qui suit
      sql = "UPDATE impaye" + "SET Impayé = ?" + "WHERE ID = ? "+ row;
     
     
      preStat =(PreparedStatement) connexion.prepareStatement(sql);
      preStat.setObject(1, table.getValueAt(row, col));
      preStat.executeUpdate();
      preStat.close();
    }
    Soit tu rajoutes un else dans ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if(col==4){//Accolade du if, si elles y sont pas, il ne prend que la ligne qui suit
      sql = "UPDATE impaye" + "SET Impayé = ?" + "WHERE ID = ? "+ row;
    }else{
      //Tu mets dans sql ce que tu dois envoyer à ta bdd si tu n'es pas à la colonne 4 de ta table
    }
     
      preStat =(PreparedStatement) connexion.prepareStatement(sql);
      preStat.setObject(1, table.getValueAt(row, col));
      preStat.executeUpdate();
      preStat.close();

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Djibouti

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    J'ai presque résolu mon problème, mais lors que dans mon Select je spécifie les colonnes je n'arrive pas à faire la modifie tandis que si je fais select * la modification se fait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    {
    sql = ("UPDATE impaye SET Impayé ='"+ table.getValueAt(row, col)+"'");
    								preStat =(PreparedStatement) connexion.prepareStatement(sql);
    								preStat.executeUpdate();
    					        	preStat.close();
    }

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Points : 68
    Points
    68
    Par défaut
    Tu veux dire que tu ne peux pas mettre à jour "Impayé" c'est ca?

    Si c'est le cas c'est probablement à cause de l'accent "é", remplace le par son code unicode et ça devrait marcher (En java un code unicode commence par \u suivi de son code hexadécimal, pour le é c'est "\u00E9")

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Djibouti

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    ça fonctionne juste un peu petit problème lorsque je modifie une ligne dans JTable toutes lignes sont modifiées ainsi que dans la base des données. Juste ça et je passe le sujet résolu.

    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
    enregistrer.addActionListener(new ActionListener(){
    			    	public void actionPerformed(ActionEvent e)
    			    	{  
    			    		int row=table.getSelectedRow();
    			    		try {
    			    			String sql = null;
    			    			sql = "Update IMPAYE SET Créance=? ";
    			    			preStat =(PreparedStatement) connexion.prepareStatement(sql);
    			    			preStat.setString(1, (String) table.getValueAt(row, 4));
    			    			preStat.executeUpdate();
    			    			preStat.close();
     
    			    			JOptionPane.showMessageDialog(null,"Enregistrer");
     
    				          } catch (SQLException insertException) {
    				        	   System.out.println("Error:"+insertException.getMessage());
    				          }
    			    	}
     
    				      });

  8. #8
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    salut ,
    comment s´appelle la table donc tu veux enregistrer les modifications dans la base de données?
    et aussi qu´elles sont les elements composants les colonnes de ta Table.

    car si tu as comme nom de la table : taTable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      taTable.getModel().addTableModelListener(new TableModelListener(){
             @Override
             public void tableChanged(TableModelEvent evt){
                 //mettre ton code ici
             }
    });
    Eric

  9. #9
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Djibouti

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    Désolé pour le retard, j'avais un petit soucis.
    J'ai toujours le même problème lorsque je modifie une cellule dans la colonne 4, toutes les cellules de cette colonnes prennent la même modification

    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
     table.getModel().addTableModelListener(new TableModelListener(){
    			         @Override
    			         public void tableChanged(TableModelEvent evt){
    			        	 int row=table.getSelectedRow();
    				    		try {
    				    			String sql = null;
    				    			sql = "Update IMPAYE SET Créance=? ";
    				    			preStat =(PreparedStatement) connexion.prepareStatement(sql);
    				    			preStat.setString(1, (String) table.getValueAt(row, 4));
    				    			preStat.executeUpdate();
    				    			preStat.close();
     
    				    			JOptionPane.showMessageDialog(null,"Enregistrer");
     
    					          } catch (SQLException insertException) {
    					        	   System.out.println("Error:"+insertException.getMessage());
    					          }
    			         }
    			});

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Normal que toute la table soit modifiée lorsque tu fais l'update : il n'y a plus de clause WHERE dans ton dernier code ! Il te faut un moyen de retrouver l'enregistrement à modifier, par sa clef primaire. Je ne sais pas à quoi correspond row dans ton premier code, je pense que c'était l'idée à l'origine.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Djibouti

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    Nom : Sans titre.jpg
Affichages : 1799
Taille : 21,3 Ko

    Ce que je veux tout simplement c'est de passer les impayés en payés et j'ai ajouté la clause where mais j'ai ce message : Error:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE ID='payé'' at line 1.

    Mon row correspond a récupéré les valeurs de la ligne sélectionnée.

    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
    table.getModel().addTableModelListener(new TableModelListener(){
    			         @Override
    			         public void tableChanged(TableModelEvent evt){
    			        	 int row=table.getSelectedRow();
    			        	 String selection = model.getValueAt(row, 4).toString();
    			        	 if (row >= 0) {    
     
    				    		try {
    				    			String sql = null;
    				    			sql = "Update IMPAYE SET Créance WHERE ID=? ";
    				    			preStat =(PreparedStatement) connexion.prepareStatement(sql);
    				    			preStat.setString(1, (String) table.getValueAt(row, 4));
    				    			preStat.executeUpdate();
    				    			preStat.close();
     
    				    			JOptionPane.showMessageDialog(null,"Enregistrer");
     
    					          } catch (SQLException insertException) {
    					        	   System.out.println("Error:"+insertException.getMessage());
    					          }
    			         }
    			         }
    			});

  12. #12
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Oui, tu as remis l'update, masi tu as enlevé le paramètre pour la créance : sql = "Update IMPAYE SET Créance =? WHERE ID=? ";. Dans un preparedStatement, chaque ? représente une valeur paramétrée.

    Et maintenant qu'il y a 2 valeurs paramétrées dans l'update, il faut leur donner une valeur, et la bonne évidemment (appel de la méthode setString() avec les paramètres adéquats), soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    preStat.setString(1, (String) table.getValueAt(row, 4)); // la valeur pour le champ Céance
    preStat.setInt(2, (Integer) table.getValueAt(row, 0)); // l'id (en supposant que ça soit du Integer)

  13. #13
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Djibouti

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    Merci infiniment joel.drigo .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/05/2012, 19h54
  2. Réponses: 4
    Dernier message: 20/07/2011, 14h03
  3. Réponses: 9
    Dernier message: 11/10/2010, 18h29
  4. [AC-2007] importer des données à partir d'une base de données sous access
    Par skipeemed dans le forum Access
    Réponses: 1
    Dernier message: 29/09/2010, 15h08
  5. [C#2.0] Mettre à jour la base de données à partir d'une DataTable
    Par Rodie dans le forum Accès aux données
    Réponses: 6
    Dernier message: 16/05/2007, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo