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 :

[MySQL] Erreur "MySQLSyntaxErrorException"


Sujet :

JDBC Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 9
    Points
    9
    Par défaut [MySQL] Erreur "MySQLSyntaxErrorException"
    Bonjour,

    Je suis en train de développer une application de gestion de Candidats.

    Nom de la base de donnée Dbasemalek. Une table identif avec deux attributs NomIdentif et MotPass.

    Pour qu'un utilisateur puisse accéder à l'application il doit s'identifier.

    J'ai écrit le code source suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
              String ID = jTextField1.getText();
              String MP = jTextField2.getText();
            ÉcoleImemMalek ecol =  new ÉcoleImemMalek();
     
            System.out.println(jTextField1.getText());
            ecol.ExecQuery("select from identif where ID=identif.NomIdentif AND MP=identif.MotPass");
    et le code source de la methode ExecQuery est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public void ExecQuery(String req)
        {
            try{
                System.out.println(req);
                rs = st.executeQuery(req);
                while(rs.next())
                    System.out.println(rs.getString("utilisateur"));
            }catch(SQLException e){
                System.out.println(e);
            }  
        }
    A l'exécution, l'erreur suivante s'affiche
    select from identif where ID=identif.NomIdentif AND MP=identif.MotPass
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 'from identif where ID=identif.NomIdentif AND MP=identif.MotPass' at line 1
    Quelqu'un saurait-il m'expliquer d'où vient le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Comme le dit ton message d'erreur, ta requête SQL est incorrecte (tu ne précise même pas ce que tu sélectionnes par exemple) :
    You have an error in your SQL syntax;
    Teste déjà ta requête dans un éditeur style dbVisualizer ou SQL Developer. Ca te permettra d'être sur que tu n'écris pas des requêtes incorrectes. Ensuite, tu pourras la passer au sein du code Java.

    Ensuite, j'ai d'autres remarques sur le fond de ton code. Essaye de respecter les conventions :
    - Ne pas utiliser de majuscule en début de méthode
    - Ne pas faire de classe Java avec accent
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Merci mais comment puis-je résoudre mon problème ? Comment corriger la requête ?

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Ta requête est incorrecte.

    1 Tu n'as pas indiqué les champs de ta table que tu veux récupérer après le mot clef select.
    2 Ce n'est pas de cette façon que tu pourras passer le contenu de tes champs MP et ID à ta requête.

    Je t'enjoins donc à aller suivre un tutoriel sur JDBC de bout en bout afin de comprendre ce qu'il faut faire.

    http://jguillard.developpez.com/JDBC/
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Bonsoir, mes amis,

    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 boolean ExecQuery(String req, String ID, String MP)
        {
            boolean t=false;
            try{
                System.out.println(req);
                rs=st.executeQuery(req);
     
                while(rs.next() || (t=true)){
                 String St=rs.getString("NomIdentif");
                 String Mp=rs.getString("MotPass");
                 if ((St==ID) && (Mp==MP))
                 {t=true;
                 System.out.println(t);}
     
                 System.out.println(St+ " " +Mp);
                }
            }catch(SQLException e){
                System.out.println(e);
     
            }  
     
         return t;   
        }
    après l’exécution de cette méthode, Error:

    java.sql.SQLException: After end of result set

    Qui peut m'aider à résolu cette erreur !
    Cordialement ..

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par sinok Voir le message
    Ta requête est incorrecte.

    1 Tu n'as pas indiqué les champs de ta table que tu veux récupérer après le mot clef select.
    2 Ce n'est pas de cette façon que tu pourras passer le contenu de tes champs MP et ID à ta requête.

    Je t'enjoins donc à aller suivre un tutoriel sur JDBC de bout en bout afin de comprendre ce qu'il faut faire.

    http://jguillard.developpez.com/JDBC/
    merci mon frère pour le tutoriel

  7. #7
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Tes conditions de boucle sont incorrectes, en effet, elles autorisent à boucler au délà du contenu du resultset.

    En effet, l'opérateur de comparaison est == et non = que tu utilises dans les conditions de ton while.

    Mieux vaut faire le while sur le rs.next uniquement et faire un break dans le cas tu as trouvé le couple id/mot de passe
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  8. #8
    Futur Membre du Club
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    mercii beaucoup mon frère,

    Si la condition est fausse; je doit afficher un message d'erreur !
    quels sont les méthodes utilisés en java pour un message d'erreur !

    mieux,j'aime à voire le message s'affiche dans même fenêtre!

    Cordialement ..

  9. #9
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Plop,

    Je verrai plus un code comme cela. Ici tu n'aurai pas le problème de ton booléen tout en gardant ton type de retour. De plus, pense à fermer tes ressources (ResultSet et Statement).

    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
     
    public boolean ExecQuery(String req, String ID, String MP)
        {        
            try{
                rs=st.executeQuery(req);
                while(rs.next()){
                 String St=rs.getString("NomIdentif");
                 String Mp=rs.getString("MotPass");
                 System.out.println(St+ " " +Mp);
                }
            }catch(SQLException e){
                System.err.println(e); 
                return false;
            }  
         return true;   
        }
    Maintenant, la condition sera forcément fausse à un moment donné, lorsque tu n'auras plus rien sur lequel itéré, et donc que tu auras parcouru l'ensemble des données retournées par ta requête SQL.

    Pour ce qui est de la gestion des messages, tu peux simplement passer par les sorties standards (System.out et System.err). Si tu désires avoir une gestion plus précise (niveau d'erreur, écriture des messages dans des flux, ...) je te conseille de passer par des APIs et bibliothèques de logging.

    Je t'invite à regarder les suivantes :
    1. java.util.logging
    2. log4j
    3. slf4j


    Personnellement, j'utilise java.util.logging pour des petits projets personnels, et log4j pour des projets plus sérieux.

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Bonjour,
    je doit modifier le ligne sélectionné seulement!

    Quel est le méthode utilisé en java/sql!

    Cordialement ..
    Images attachées Images attachées  

  11. #11
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Plop,

    Il te suffit d'exécuter une requête de type UPDATE.

    Pour la partie Java, il faut faire quelque chose de la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try{
       Connection connection = ...
       Statement statement = connection.createStatement();
       statement.executeQuery("UPDATE ....");
    } catch(SQLException e){
     
    }
    Je t'invite à lire la FAQ JDBC ici pour en apprendre plus.

  12. #12
    Futur Membre du Club
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par olivier.pitton Voir le message
    Plop,

    Il te suffit d'exécuter une requête de type UPDATE.

    Pour la partie Java, il faut faire quelque chose de la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try{
       Connection connection = ...
       Statement statement = connection.createStatement();
       statement.executeQuery("UPDATE ....");
    } catch(SQLException e){
     
    }
    Je t'invite à lire la FAQ JDBC ici pour en apprendre plus.
    merci mon amis pour votre réponse,

    Je sais que je doit utiliser" UPDATE", mais je doit modifier le ligne ""sélectionner"" sans entrer aucun valeur d'un attribut du tableau.?
    Aprés la sélection d'une ligne j'appuie sur le bouton supprimer par exemple, juste le ligne sélectionner supprimer sans enrer aucun valeur !!!

Discussions similaires

  1. [MySQL] Sauvegarder du texte (db mysql) CR, single-quote, double-quote, etc
    Par vandeyy dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/03/2007, 11h22

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