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ème de requête SQL


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut Problème de requête SQL
    salut mon but c'est d'arriver à obtenir les données d'une table de ma base de données (Mysql) et de l'afficher dans des JTextField.
    pour cela je fais:
    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
     
     try
                        {
                           Statement st = con.createStatement();
                           String rq = "SELECT * FROM etudiant WHERE idEtudiant='"+Integer.valueOf(text.getText()).intValue()+"'";
                                   /*'"+Integer.valueOf(text.getText()).intValue()+"'"; parce que mon  idEtudiant est de type INT */
                           ResultSet rs= st.executeQuery(rq);
     
                            matricule.setText(rs.getString("idEtudiant"));
                            nom.setText(rs.getString("nomEtudiant"));
                            prenom.setText(rs.getString("prenomEtudiant"));
                            sexe.setText(rs.getString("sexeEtudiant"));
                            filiere.setText(rs.getString("Filiere"));
                            con.close();
                        }
                        catch(SQLException c)
                         {
                            String error = "SQLState: " + c.getSQLState() 
                         + "\nError Code: " + c.getErrorCode() 
                         + "\nMessage: " + c.getMessage();
                            JOptionPane.showMessageDialog(this,"Erreur Survenue !\nVeuillez réessayer !!!\n\n"+error, "Erreur", JOptionPane.ERROR_MESSAGE);
                         }
    Mais ça débouche toujours sur le catch(SQLException c)
    erreur:Nom : sqlrch.PNG
Affichages : 189
Taille : 6,2 Ko
    c'est là que j'ai besoin d'aide.
    cordialement!!!

  2. #2
    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,

    Avant de commencer à lire des données dans le ResultSet, il faut placer le curseur, même si tu es sûr qu'il y a un résultat au plus (un seul étudiant au plus avec l'id).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if ( rs.next() ) {
             // il y a bien au moins résultat
             matricule.setText(rs.getString("idEtudiant"));
             /*...*/
     
    }
    else {
            // il n'y a pas de résultat...
    }
    NB: je te conseille d'opter tout de suite pour les PreparedStatement au lieu des Statement classique.
    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.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    ok Mais j'ai un peu de mal dans l'utilisation du PreparedStatement.
    quand je fais
    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
     
    public void SQLupdate(String sql)
     {
            Connection con = null;
            PreparedStatement pst = null;
            try{
                pst = con.prepareStatement(sql); //  <--- erreur ici!
                pst.executeUpdate();
                JOptionPane.showMessageDialog(this, "Opération effectuée avec succès!!");
                pst.close();
            }
            catch(SQLException c) {
               JOptionPane.showMessageDialog(this, "Impossible d'exécuter la requête" + e.getMessage());
    		}
    }
    ce code signal une erreur lorsque je l'appelle comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     String rq = "INSERT INTO enseignant VALUES ('"+matricule.getText()+"', '"+nom.getText()+"', '"+prenom.getText()+"')";
      SQLupdate(rq);
    Comment puis-je corriger?

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    de plus est ce ke c'est possible de faire une methode generale au lieu de faire
    une methode SQLupdate pour les ordre executeUpdate et
    SQLquery pour les ordre executeQuery ?

  5. #5
    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
    Citation Envoyé par Toogda Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     String rq = "INSERT INTO enseignant VALUES ('"+matricule.getText()+"', '"+nom.getText()+"', '"+prenom.getText()+"')";
      SQLupdate(rq);
    Cela ne sert pas à grand chose d'utiliser un PreparedStatement si c'est pour mettre la requête en dur dedans. Le but c'est, entre autres, d'éviter de traiter les quotes à la main et ce genre de chose.

    Citation Envoyé par Toogda Voir le message
    ce code signal une erreur lorsque je l'appelle comme ceci
    [...]
    Comment puis-je corriger?
    Si seulement je savais quelle erreur... à moins que cela ne soit tout simplement une NullPointerException parce que con est null ?

    Citation Envoyé par Toogda Voir le message
    de plus est ce ke c'est possible de faire une methode generale au lieu de faire
    une methode SQLupdate pour les ordre executeUpdate et
    SQLquery pour les ordre executeQuery ?
    Ce n'est pas impossible, mais pourquoi faire ?
    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.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    en fait j'avais oublier d'appeler la methode de connexion comme vous l'avez souligner (erreur corrigé).
    Cela ne sert pas à grand chose d'utiliser un PreparedStatement si c'est pour mettre la requête en dur dedans. Le but c'est, entre autres, d'éviter de traiter les quotes à la main et ce genre de chose.
    Mais Si je place la requête directement ça m'empêcherais d'utiliser cette methode (SQLupdate(...)) pour des insertion dans d'autres tables.
    ..mais pourquoi faire ?
    Jaimerais modiffier SQLupdate(..) affin de pouvouir faire des 'executeQuery et executeUpdate ' avec cette même fonction.

  7. #7
    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
    Citation Envoyé par Toogda Voir le message
    Mais Si je place la requête directement ça m'empêcherais d'utiliser cette methode (SQLupdate(...)) pour des insertion dans d'autres tables.
    Oui, ça c'est sûr qu'il faut modifier la méthode.

    Citation Envoyé par Toogda Voir le message
    Jaimerais modiffier SQLupdate(..) affin de pouvouir faire des 'executeQuery et executeUpdate ' avec cette même fonction.
    Non, mais ça, j'ai bien compris. La question était pourquoi donc vouloir faire qu'une seule méthode pour faire deux choses différentes ?
    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.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    Mais avant je tiens a formuler correctement une methode SQLquery()
    //objectif : faire une recherche a partir d'un paramètre recceulli dans un JTextField
    et afficher toute la ligne dans des JTextField.

    donc:
    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
     
     public ResultSet SQLquery(String sql, int parametre)
        {
             Connection con = null;
             PreparedStatement pst = null;
             ResultSet rs = null;
            try {
               con = connecter();
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(P_inscrire2.class.getName()).log(Level.SEVERE, null, ex);
            }
            try{
                pst = con.prepareStatement(sql);
                pst.setInt(1, parametre);
                rs=pst.executeQuery();
                JOptionPane.showMessageDialog(this, "Opération effectuée avec succès!!");
                pst.close();
            }
            catch(SQLException c) {
                 JOptionPane.showMessageDialog(this, "Impossible d'exécuter la requête" + c.getMessage());
            }
            return rs;
        }
    et pour l'appeller
    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
     
    if(evt.getSource()==rch)
            {
                ResultSet rs = null;
                String rq = "SELECT * FROM ETUDIANT WHERE idEtudiant=?";
                int pm = Integer.valueOf(matricule.getText()).intValue();
                System.out.println("valeur"+pm); // juste pour verifier si la valeur est bien prise. et c'est ok.
                rs = p.SQLquery(rq, pm);
     
                    //matricule.setText(rs.getString("idEtudiant"));  // note erreur
    // matricule étant un int je le mets en commentaire mais y'a toujours erreur sur la ligne suivante 
                    nom.setText(rs.getString("nomEtudiant"));    // note erreur
                    prenom.setText(rs.getString("prenomEtudiant"));
                    sexe.setText(rs.getString("sexeEtudiant"));
                    filiere.setText(rs.getString("Filiere"));
        }
    Comment puis-je afficher la ligne de résultat obtenu correctement?

  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
    Citation Envoyé par Toogda Voir le message
    Comment puis-je afficher la ligne de résultat obtenu correctement?
    J'ai répondu à cette question, avec code en exemple, dans le message #2 !
    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 du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    mettre le if(..) ...else(..) ne resolvait pas mon problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     if(rs.next()) {    //<------ l'execution echoe à ce niveau maintenant.
                    matricule.setText(rs.getString("idEtudiant"));
                   ...
                }
                else
                {
                    ...
                }

  11. #11
    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
    Tu ne peux pas lire d'information d'un enregistrement dans un ResultSet si tu n'as pas avancé le curseur dessus. C'est tout, c'est comme ça. Et c'est ce que dit le message d'erreur que tu as miontré. Le faire résoud ce problème. Ça ne veut pas dire qu'il n'y en a pas d'autres et que ça les résoud aussi.
    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.

  12. #12
    Membre régulier Avatar de cobos
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Janvier 2014
    Messages : 111
    Points : 88
    Points
    88
    Par défaut
    Tu peu afficher le message d'erreur?

Discussions similaires

  1. Problème de requête SQL avec instruction TRANSFORM
    Par Nosper dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/06/2005, 16h15
  2. problème de requète SQL pour formulaire
    Par en_stage dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 21/06/2005, 12h21
  3. [SQL] Problème de requête SQL de plus de 8060 caractères ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 06/04/2005, 15h07
  4. [SQLserver2000][SQLServer CE] problème de requête SQL
    Par JBernn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/01/2005, 09h29
  5. Problème de requète SQL dans un Requery
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/10/2004, 14h58

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