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 :

erreur synthaxe sql


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Points : 49
    Points
    49
    Par défaut erreur synthaxe sql
    Bonjour,
    J’essaie d’insérer des données dans ma BD , la connexion est bonne mais quand j’exécute le code une exception est levée car la syntaxe est mauvaise mais je ne comprend pas pourquoi si vous pouviez m'indiquer l'erreur :/
    Merci d'avance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO client VALUES('anthony@mail.fr','nom','prenom','anée','M','France','ville','adresse','CP','motPasse'")

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Points : 246
    Points
    246
    Par défaut
    salut,
    ça doit venir de la parenthèse à la fin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO client VALUES('anthony@mail.fr','nom','prenom','anée','M','France','ville','adresse','CP','motPasse')"

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Points : 49
    Points
    49
    Par défaut
    merci beaucoup mais en faite il doit y avoir une autre erreur car malgré ma correction lors de la compilation j'obtiens cette erreur :
    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
    Exception in thread "main" 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 '"INSERT INTO client (mail,nom,prenom,age,sexe,pays,ville,adresse,cp,password) VA' at line 1
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    "INSERT INTO client (mail,nom,prenom,age,sexe,pays,ville,adresse,cp,password) VALUES('palmieri.anthony@hotmail.fr','Palmieri','Anthony','1991','M','France','Contes','191 montée du serre','06390','motPasse')"	at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    	at com.mysql.jdbc.Util.getInstance(Util.java:384)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
    	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
    	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
    	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2562)
    	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1664)
    	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1583)
    	at javaapplication1.Client.insertBase(Client.java:99)
    	at javaapplication1.JavaApplication1.main(JavaApplication1.java:18)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 0 seconds)
    voila mon 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
    package javaapplication1;
     
    import java.sql.*;
     
    public class JavaApplication1 {
     
        public static void main(String[] args) throws Exception {
           Connection cnx = null;
            Class.forName("com.mysql.jdbc.Driver");
            cnx = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mabase", "root", "anthony1991");
            Statement req = cnx.createStatement();
            Statement b = cnx.createStatement();
            ResultSet rs = req.executeQuery("select * FROM client");
            Client clt = new Client("palmieri.anthony@hotmail.fr,Palmieri,Anthony,1991,M,France,Contes,191 montée du serre,06390,motPasse");
        String requete="INSERT INTO Client VALUES('";
     
            System.out.println(clt);
        clt.insertBase(cnx,b);
          while (rs.next()) 
           {
                System.out.println(rs.getString(1));
    rs.close();}
     
    ResultSet rx = req.executeQuery("show tables");
           while(rx.next()){
                   System.out.println(rx.getString(1));
            }
        }        
    }
    et la méthode présente dans la classe client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void insertBase(Connection cnx,Statement req) throws SQLException{
               String requete="\"INSERT INTO client (mail,nom,prenom,age,sexe,pays,ville,adresse,cp,password) VALUES('";
                StringBuilder sb = new StringBuilder(requete);
                sb.append(this.mail).append("\',\'");sb.append(this.nom).append("\',\'");sb.append(this.prenom).append("\',\'");sb.append(this.age).append("\',\'");sb.append(this.sexe).append("\',\'");sb.append(this.pays).append("\',\'");sb.append(this.ville).append("\',\'");sb.append(this.adresse).append("\',\'");sb.append(this.codePostal).append("\',\'");sb.append(this.motDePasse).append("\')\"");
                System.out.print(sb.toString());
                req.executeUpdate(sb.toString());
    merci d'avance. J'ai lu que cela pouvais venir d'une erreur de version mais je ne pense pas vu que je fonctionne sur NetBeans et que mes requêtes SQL fonctionnent.
    Merci d'avance pour votre aide

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    String requete="\"INSERT INTO client (mail,nom,prenom,age,sexe,pays,ville,adresse,cp,password) VALUES('";
    Tu ne dois pas mettre les requêtes dans des doubles quotes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String requete="INSERT INTO client (mail,nom,prenom,age,sexe,pays,ville,adresse,cp,password) VALUES('";
    A+.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Points : 49
    Points
    49
    Par défaut
    Merci beaucoup pour ta correction

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Points : 49
    Points
    49
    Par défaut
    j'ai un nouveau problème pour un getString une exception SQL est levé , à la suite d'un select , je ne comprend pas pourquoi mon résultat est vide , car lorsque je tape la commande simplement a la main il y a un résultat quand même :/
    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
    public boolean ExistBase(Connection cnx, String ValueMail, Statement req) throws SQLException {
            String requete = "SELECT * FROM Client WHERE mail='ValueMail'";
            ResultSet kx = req.executeQuery(requete);
            String v = kx.getString("Mail");
            System.out.println(v);
            //if ((rs.getString("mail")).equals(ValueMail)) {
            kx.close();
            return true;
            //} else {
            //  req.close();
            // return false;
            //}
        }
    }
    mon main
    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
     
    public class JavaApplication1 {
     
        public static void main(String[] args) throws Exception {
           Connection cnx = null;
            Class.forName("com.mysql.jdbc.Driver");
            cnx = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mabase", "root", "anthony1991");
            Statement req = cnx.createStatement();
            Statement b = cnx.createStatement();
            Statement a = cnx.createStatement();
     
            Client clt = new Client("testGetString,Palmieri,Anthony,1991,M,France,Contes,191 montée du serre,06390,motPasse");
     
    if(clt.ExistBase(cnx, "zaz", b)==true){
     
            System.out.println("goooood");}
     
    }     
        }

  7. #7
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Re,

    1- N'insère pas directement la valeur dans la requête. Utilise PreparedStastement.
    2- Peut-on voir le log d'erreur?

    A+.

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu dois toujours appeler la méthode next() sur ton ResulteSet avant de lire. Cette méthode positionnera la lecture sur le premier row et, au passage, te retournera false si il n'y a pas de premier row.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Points : 49
    Points
    49
    Par défaut
    Merci pour vos réponse , en faite mon problème et que je souhaiterai voir si l'email en paramètre existe sur la BD.
    Et je suis sur que les mails sont uniques car c'est une clés primaire de ma BD.
    Donc suis obligé de parcourir le résultat avec un kx.next() ?
    Et quand on a pas commencé a faire kx.next() et qu'il n'y a qu'un seul résultat cela renvoie false non ? et au premier appel de kx.next() cela renvoie true et le résultat non ?
    Et j'ai corrigé mon erreur en faite j'avais tout simplement oublier de concaténer le ValueMail ..
    Donc dans mon cas le mieux serait de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(kx.next()==true){//je recupère la String et la compare a value mail ?}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public boolean ExistBase(Connection cnx, String ValueMail, Statement req) throws SQLException {
            String requete = "SELECT * FROM Client WHERE mail="+ValueMail;
            ResultSet kx = req.executeQuery(requete);
            String v = kx.getString("Mail");
            System.out.println(v);
            //if ((kx.getString("mail")).equals(ValueMail)) {
            kx.close();
            return true;
            //} else {
            //  req.close();
            // return false;
            //}
        }
    }

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    initialement, un resultset pointe avant le premier row (cf documentation de ResultSet.next()). Il est donc bien nécessaire de faire un appel à next() avant de lire les données.
    Dans ton cas, vu la logique de la méthode, tu devrais faire un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public boolean ExistBase(Connection cnx, String ValueMail, Statement req) throws SQLException {
            String requete = "SELECT * FROM Client WHERE mail="+ValueMail;
            ResultSet kx = req.executeQuery(requete);
            try{
                return kw.next(); // as-t-on au moins une ligne ?
            } finally {
                kx.close();
            }
     
    }
    Maintenant, regarde du coté des prepared statements, parce que c'est un très très très mauvaise idée de concaténer comme tu le fais une requête SQL

    Et renseigne toi aussi sur les conventions de nommage en java, parce que ta méthode et tes paramètres les violent gentillement

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/12/2005, 13h13
  2. Réponses: 10
    Dernier message: 26/01/2005, 19h48
  3. [CE10 Pro] Erreur Connexion SQL pour etats publiés
    Par L.nico dans le forum Connectivité
    Réponses: 1
    Dernier message: 09/12/2004, 17h16
  4. catch des erreurs dans SQL+
    Par lalystar dans le forum Oracle
    Réponses: 2
    Dernier message: 21/09/2004, 15h17
  5. message d'erreur "Microsoft SQL-DMO"
    Par tachi dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/08/2004, 11h47

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