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

JDBC Java Discussion :

problèmes sur un combobox dans une classe appelée


Sujet :

JDBC Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut problèmes sur un combobox dans une classe appelée
    Bonjour,

    Je rencontre un problème avec un comboBox. Je n'arrive pas à écrire la commande "addItem" que l'on écrit normalement après le point : exemple : maComboBox.addItem(strVilleClient);

    La liste de cette (ce ?) comboBox doit être remplie à partir d'une base de données que j'ai crée en PreparedStatement et qui (normalement) fonctionne.

    Dans le code, j'ai inséré plusieur system.out qui renvoie du texte, ce qui me prouve que les lignes sont bien lues. Et justement, je vois que ma comboBox1 n'est pas lue car le system.out ne s'affiche pas. Pourtant, cette comboBox est dans une simple boucle conditionnelle "WHILE" ....
    La comboBox est déclarée dans l'autre classe d'où j'apelle la classe TestBdd.

    voici le code :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    //import com.mysql.jdbc.PreparedStatement;
    import java.sql.PreparedStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
     
    public class TestBdd {
        TestBdd(Object comboClients1)
        {
     
            // Variables relatives à la connexion à la base de données
            String url = "jdbc:mysql://localhost:3306/BDD";
            String utilisateur = "strUser";
            String motDePasse = "pwd";
            //Connection connexion = null;
     
            //chargement du pilote
            try
            {
                Class.forName("com.mysql.jdbc.Driver");
                //Class.forName("mysql-connector-java-5.1.29-bin.jar");
                System.out.println("chargement pilote testBdd");
            }
            catch (ClassNotFoundException e)
            {
                System.out.println("erreur ClassNotFoundException e dans testBdd");
            }
     
            //Connection à la base de données
            try
            {
                System.out.println("connexion testBdd");
                Connection connexion = DriverManager.getConnection( url, utilisateur, motDePasse );
            }
            catch (SQLException e)
            {
                System.out.println("SQLException erreur testBdd");
            }
     
            try
            {
                Connection connexion = DriverManager.getConnection( url, utilisateur, motDePasse );
                String sql = "SELECT * FROM client WHERE ville = '?'";
                PreparedStatement prep1 = connexion.prepareStatement(sql);
                ResultSet rs = prep1.executeQuery(sql);
                while (rs.next())
                {
                    String villeClient = rs.getString("ville");
                    comboClients1.addItem(villeClient);
                }
                System.out.println(prep1 + "dans testBdd");
            }
            catch (SQLException e)
            {
                e.printStackTrace();
                System.out.println("erreur SQLException requete dans testBDD");
            }
     
            /*finally
            {
                if ( connexion != null )
                    try 
                    {
                        // Fermeture de la connexion
                        System.out.println("fermeture connexion dans RecBdd !?!");
                        connexion.close();
                    }
                    catch ( SQLException ignore )
                    {
                        // Si une erreur survient lors de la fermeture, il suffit de l'ignorer.
                    }
            }*/
     
        }
     
    }
    J'apelle la classe TestBdd depuis la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import javax.swing.JComboBox;
    ....
    JComboBox comboClients1;
    .....
    comboClients1 = new JComboBox();
    .....
     
    TestBdd testBdd = new TestBdd(comboClients1);
    Voici le texte qui s'affiche dans la fenêtre de sortie de NetBeans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    chargement pilote testBdd
    connexion testBdd
    com.mysql.jdbc.JDBC4PreparedStatement@15fff9c: SELECT * FROM client WHERE ville = '?'dans testBdd
    chargement pilote commande afficher
    connexion BDD commande afficher
    Merci pour vos aides !!!
    OS : LinuxMint 20

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    Le problème est simple ta requête n'est pas correct, il ne faut pas les cotes autour du "?" !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String sql = "SELECT * FROM client WHERE ville = ?";
    Et si tu executes ça directement tu auras une erreur car tu ne renseignes pas le critère "ville".
    Tu dois donc ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PreparedStatement prep1 = connexion.prepareStatement(sql);
    prep1.setString(1, "maVille");
    D'autre part, vue que la requête est déclaré dans le PreparedStatement, il est aucunement utile de la mettre dans le executeQuery :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ResultSet rs = prep1.executeQuery();
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonjour,

    Merci beaucoup pour cette réponse très argumentée !

    Il est vrai qu'en mettant le ? sans les quotes j'avais une erreur et c'est ce qui m'a fait mettre les quotes ..... Je n'avais plus d'erreurs mais c'était quand même une erreur de ne plus avoir d'erreur ... donc merci de m'avoir bien éclairé

    J'ai suivi tous vos conseils, et NetBeans ne me remonte plus d'erreur, toutefois, la commande WHILE n'est toujours pas exécutée.

    Voici ce qu'est devenu la partie modifiée du programme :
    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
            try
            {
                Connection connexion = DriverManager.getConnection( url, utilisateur, motDePasse );
                String sql = "SELECT * FROM client WHERE ville = ?";
                PreparedStatement prep1 = connexion.prepareStatement(sql);
                prep1.setString(1, "ville");
                ResultSet rs = prep1.executeQuery();
                while (rs.next())
                {
                    String villeClient = rs.getString("ville");
                    comboClients1.addItem(villeClient);
                    System.out.println(villeClient + " / ");
                }
                System.out.println(prep1 + "dans testBdd");
            }
            catch (SQLException e)
            {
                e.printStackTrace();
                System.out.println("erreur SQLException requete dans testBDD");
            }
    Et voici le texte de la fenêtre de sortie de NetBeans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    chargement pilote testBdd
    connexion testBdd
    com.mysql.jdbc.JDBC4PreparedStatement@11730ce: SELECT * FROM client WHERE ville = 'ville'dans testBdd
    BUILD SUCCESSFUL (total time: 42 seconds)
    Merci beaucoup !
    OS : LinuxMint 20

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Ca ne passe pas dans le while tout simplement parce qu'il n'existe pas en base de ville qui s'appelle "ville";
    dans le setString il faut mettre la ville recherché, c'est le paramètre de ta requête.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prep1.setString(1, "paris");
    ou si la ville se trouve dans une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prep1.setString(1, maVariableQuiContientLaVille);
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonsoir,

    Merci pour ces infos.

    En fait, je souhaite faire lister dans le comboBox tous les noms de villes présents dans le tableau (sans répétitions : DISTINCT). Est-ce que le fait d'avoir apeller une classe nouvelle (testBdd) pour faire ce traitement ne gênerait pas le bon déroulement du code ?

    De plus, on peut voir dans le code que j'ai écris ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comboClients1.addItem(ville);
    Mais en fait, NetBeans n'accepte même la mention "addItem" ! et je ne comprends pas non plus.

    {:o/
    OS : LinuxMint 20

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonsoir,

    J'ai modifié la requête comme ceci mais le code me donne encore du fil retordre ...

    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
            try
            {
                Connection connexion = DriverManager.getConnection( url, utilisateur, motDePasse );
                String sql = "SELECT DISTINCT ? FROM client";
                PreparedStatement prep1 = connexion.prepareStatement(sql);
                prep1.setString(1, "ville");
                ResultSet rs = prep1.executeQuery();
                while (rs.next())
                {
                    String villeClient = rs.getString("ville");
                    //comboClients1.addItem(villeClient);
                    System.out.println(villeClient + " / ");
                }
                System.out.println(prep1 + "dans testBdd");
            }
    OS : LinuxMint 20

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Re bonsoir,

    J'ai encore avancé dans mes recherches de la bonne requête et j'ai trouvé ce qu'il me faut comme indiqué ci-dessous, mais il me reste mon problème du comboBox1 qui n'accepte pas dans NetBeans que j'écrive "addItem" mais il me propose "equals(object)", "getClass()", "hashCode()" ..etc :
    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
     
            try
            {
                Connection connexion = DriverManager.getConnection( url, utilisateur, motDePasse );
                String sql = "SELECT DISTINCT ville FROM client";
                PreparedStatement prep1 = connexion.prepareStatement(sql);
                ResultSet rs = prep1.executeQuery();
                while (rs.next())
                {
                    String villeClient = rs.getString("ville");
                    comboClients1 // ici NETBeans n'accepte pas l'écriture de "addItem" mais il me propose "equals(object)", "getClass()", "hashCode()"
                    System.out.println(villeClient + " / ");
                }
                System.out.println(prep1 + "dans testBdd");
            }
    Et voici le texte dans la fenêtre de sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    chargement pilote testBdd
    connexion testBdd
    ville1 / 
    ville2 / 
    ville3 / 
    ville4 / 
    ville5 / 
    com.mysql.jdbc.JDBC4PreparedStatement@4e8204: SELECT DISTINCT ville FROM clientdans testBdd
    BUILD SUCCESSFUL (total time: 18 seconds)
    Merci !
    OS : LinuxMint 20

  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
    ton Constructeur a comme Argument un Objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TestBdd(Object comboClients1)
    donc quand tu lui fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comboClients1.addItemm()
    c´est normal qu´il ne l´accepte pas.
    ce que je proposerais, c´est que tu lui fasses savoir que l´objet en question est du type:
    en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      if(comboClients1 instanceOf(JComboBox)
      {
         // donc
         comboClients1.addItem(villeClient);     
      }
    Eric

  9. #9
    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 : 54
    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,

    Pourquoi ne pas plutôt changer le type de l'argument du constructeur, au lieu de tester la classe et de caster (parce qu'il faudrait caster, @Jeffray03, pour que ton code fonctionne, et virer la parenthèse ouvrante en trop) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TestBdd(JComboBox comboClients1)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonjour à tous,

    C'était bien le type de l'argument du constructeur qui faisait défaut !
    Tout fonctionne à merveille à présent et je vous en remercie tous.

    Grâce à vous on peux évoluer dans notre compréhension des languages informatiques
    OS : LinuxMint 20

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/10/2009, 11h14
  2. [POO] Problème avec un require_once dans une classe
    Par Sayrus dans le forum Langage
    Réponses: 5
    Dernier message: 23/02/2008, 14h40
  3. Problème sur un pointeur dans une structure
    Par steph_1 dans le forum Langage
    Réponses: 5
    Dernier message: 05/09/2007, 18h59
  4. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  5. Réponses: 9
    Dernier message: 19/05/2007, 15h28

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