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

Interfaces Graphiques en Java Discussion :

Remplir JCombobox avec la valeur d'une clé étrangère


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Août 2013
    Messages : 16
    Par défaut Remplir JCombobox avec la valeur d'une clé étrangère
    Bonjour,

    J'ai 2 tables : utilisateur ( num,nom,session,servid) et service
    service(servid,libelle)
    utilisateur ( num,nom,session,#servid)

    j'utilise un jcombobox pour sélectionner le service de l'utilisateur à sa création.
    (code)
    private void RemplirService(){
    try{
    Rs=St.executeQuery("SELECT libelle FROM service");

    while(Rs.next()){
    libelle=Rs.getString("libelle");
    cmbservice.addItem(libelle);
    ...
    avec ce code le jcombobox se rempli mais lorsque j'enregistre j'ai un erreur d'incompatibilité de type. c'est normal parce le type du champ libelle et servid sont différents mais comment corriger le problème.
    ci dessous
    code ajout
    St.executeUpdate("Insert into user Values("+txtnumero.getText()+",'"+txtnom.getText()+"','"+txtnomsession.getText()+"','"+txtmotdepasse.getText()+"'");

    code update
    St.executeUpdate("UPDATE user set nom='"+txtnom.getText()+"',nomsession='"+txtnomsession.getText()+"',motdepasse='"+txtmotdepasse.getText()+"'WHERE numero=" +txtnumero.getText());

    merci d'avance

  2. #2
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Salut,

    Déjà peux tu nous donner la trace de ton erreur ?

    Ensuite si je comprends bien tu veux remplir ton combo box avec ce qu'il y a dans ta table service, et enregistrer la clé servid associée à cette valeur dans ta table utilisateur.

    Dans ce cas pourquoi tu ne récupères pas le servid en même temps que ton libellé, que tu pourras ensuite insérer facilement dans ta table ?

    Tu pourrais stocker la pair (servid,libellé) dans une Map par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    Map<String,Integer> map = new Map();
     
    Rs=St.executeQuery("SELECT * FROM service");
     
    while(Rs.next()){
    servid=Rs.getInt("servid");
    libelle=Rs.getString("libelle");
    cmbservice.addItem(libelle);
    map.put(libelle,servid);
    }
    Ensuite je te conseille d'utiliser PreparedStatement pour faire des requêtes, c'est bien plus robuste et ça évite les injections SQL.

    Cdt.

  3. #3
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Par défaut
    Citation Envoyé par patnership2013 Voir le message
    code ajout
    St.executeUpdate("Insert into user Values("+txtnumero.getText()+",'"+txtnom.getText()+"','"+txtnomsession.getText()+"','"+txtmotdepasse.getText()+"'");
    Bonjour,
    il y a un problème dans la requête d'ajout. A mons avis, tu ne fournis pas de bonne valeur pour le champ serviceid de la table user. En se réferant à la structure de ta table user, je ne vois pas le champ motdepasse, vu la disposition des valeurs que tu as passées à ta requête, c'est la dernière valeur (donc motdepasse) qui est passée au champ serviceid qui parait d'un autre type.
    Donc, je te propose plutôt de charger dans ta jCombo les ServiceId à la place de libelle car c'est ces serviceid qui jouent le rôle de clés étrangères dans les enregistrements de la table user, ensuite tu récupères la valeur sélectionnée dans la jcombo que tu passes alors pour valeur du champ serviceid dans ta requête à la place de motdepasse.
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Août 2013
    Messages : 16
    Par défaut
    la table utilisateur(numero,nom,nomsession,motdepasse,#servid)

    Lorsque je stocke la pair (servid,libellé) dans une Map mon jcombo affiche seulement un service dans la liste deroulante.

    ci-dessous le lien du message d'erreur :

    http://db.tt/qGlqIfkm

  5. #5
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Je vois pas très bien le problème en fait. Si tu stockes la paire (libelle,servid) ET NON PAS (servid,libelle) qui est le résultat de ta requête SQL.

    Tu peux remplir ton combo avec les clés de la Map et insérer en bases, à partir de cette clé, la valeur (servid donc).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Map<String,Integer> map = new Map();
     
    Rs=St.executeQuery("SELECT * FROM service");
     
    while(Rs.next()){
    servid=Rs.getInt("servid");
    libelle=Rs.getString("libelle");
    cmbservice.addItem(libelle);
    map.put(libelle,servid);
    }
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    St.executeUpdate("UPDATE user set nom='"+txtnom.getText()+"',nomsession='"+txtnomsession.getText()+"',motdepasse='"+txtmotdepasse.getText()+"servid="+map.get(cmbservice.getSelectedItem())+"' WHERE numero=" +txtnumero.getText());
    Et quand je parle d'erreur j'entends pas là la stackTrace.

    Et je persiste aussi sur le preparedStatement

  6. #6
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    Et quand je parle d'erreur j'entends pas là la stackTrace.
    Rajoutes dans les catch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    catch(Exception e){
    e.printStackTrace();         < ---- Ajout de la stackTrace en console !

  7. #7
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Août 2013
    Messages : 16
    Par défaut
    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
     
     private void RemplirService(){
           //pour remplir le jcombo service
     
            String sql="select servid,nomservice from service";
          try{
                  pst=con.prepareStatement(sql);
                  Rs=pst.executeQuery();
                   while(Rs.next()){
                 nomservice=Rs.getString("nomservice");
                 cmbservice.addItem(nomservice);
                 serviceMap.put(servid,nomservice);
     
             }              
     
          }catch (Exception e){
             JOptionPane.showMessageDialog(null,e);
    pour la mise à jour:

    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
     
    String sql="update user set nom = ?, nomsession = ?,servid =?, motdepasse = ? where numero = ?";
     
            try {
     
                String comboserv =cmbservice.getSelectedItem().toString();
                pst=con.prepareStatement(sql);
                pst.setString(1, txtnom.getText());
                pst.setString(2, txtnomsession.getText());
                pst.setString(3, serviceMap.get(comboserv));
                pst.setString(4, txtmotdepasse.getText());
                pst.setString(5, txtmotdepasse.getText());
                pst.executeUpdate();
                JOptionPane.showMessageDialog(null, "Updated");
                    AfficherProfil();
     
            }catch(Exception e){
                JOptionPane.showMessageDialog(null, "Erreur modification profil\n"+e.getMessage());
    Lorsque je clique "modifier" , ce message d'erreur apparait
    http://db.tt/niDbFp1s
    Comment faire ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/04/2013, 23h10
  2. Réponses: 5
    Dernier message: 04/05/2011, 17h21
  3. Réponses: 11
    Dernier message: 24/02/2010, 14h22
  4. remplir un model avec les valeurs d'une JList
    Par soujava dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 15/05/2008, 21h11
  5. Apelle d une fonction js avec la valeur d'une listbox
    Par echecetmat dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/02/2005, 16h53

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