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 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check


Sujet :

JDBC Java

  1. #1
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut Erreur com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check
    Bonjour à tous j'ai cette erreur sur ma
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    servlet 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 'table' at line 1
    voici là ou l'erreur ce produit:
    Code java : 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
    //Permet l'enregistrement du score du joueur qui a fait mieux que les 5 premiers joueurs
    	public boolean Enregistrement_Score()
    	{
    		try
    		{
    			// Exécution de la requêtes
    			System.out.println("ok");
    			BD=ds.getConnection();
    			Statement s = BD.createStatement();
    			//insertion dans la base
     
    			ResultSet u = s.executeQuery("SELECT COUNT(*) FROM table");
    			if(u.getInt(0) > 1){
    				ResultSet r = s.executeQuery("SELECT nom FROM score ORDER BY ASC LIMIT 1");
    			    s.executeUpdate("DELETE * FROM score WHERE nom='"+r.getString(nom)+"'");
    			    s.executeUpdate("INSERT INTO score VALUES('"+this.nom+"','"+this.Score+"','"+this.niveau+"')");
    				s.close();
    				BD.close();
    			}else{
    				s.executeUpdate("INSERT INTO score VALUES('"+this.nom+"','"+this.Score+"','"+this.niveau+"')");
    				s.close();
    				BD.close();
    				s = null;
    			}
    			return true;
     
    		}
    		catch (java.sql.SQLException ex) {
    				System.out.println("Erreur d'exécution de la requête SQL \n"+ex);
    				return false;
    		}

    je veux ajouter un score mais avant sa comparer si dans ma base il y a plus de 1 utilisateur alors je le supprimer j'ajoute le nouveau sinon j'ajoute le nouveau directement mais je procède mal auriez vous une idée merci à tous cordialement

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java/JavaEE
    Inscrit en
    Août 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java/JavaEE

    Informations forums :
    Inscription : Août 2014
    Messages : 194
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Pour commencer
    Le résultat de cette condition n'a aucun sens puisque tu es entrain de récupérer le count d'une table. Tu dois regarder ici pour voir comment récupérer le nombre de ligne d'une requête.

    A ce qui concerne tes testes, la tu pourras faire ça via une seule requête au lieu de tester puis supprimer puis ajouter ..... je te fille un exemple simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void test(){
    		try {
     
    			String sql  = "INSERT INTO utilisateur(id,login,password,nom,prenom,role) VALUES(22, 'admin', 'admin', 'aloo', 'test','test') ON DUPLICATE KEY UPDATE id=VALUES(id),login=VALUES(login),password=VALUES(password),nom=VALUES(nom),prenom=VALUES(prenom)";
    			ste=conn.createStatement();
    			ste.executeUpdate(sql);
    		} catch (SQLException exception) {
    			System.out.println(exception.getErrorCode());
    			System.out.println(exception.getMessage());
    		}
    	}

  3. #3
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    Merci de votre réponse j'ai modifié mais j'ai pu beaucoup de temps pour que sa soit fonctionnel l'ajout de l'utilisateur fonctionner c'est juste la supprerssion qui ne marche pas:

    Code java : 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
    public boolean Enregistrement_Score()
    	{
    		try
    		{
    			// Exécution de la requêtes
    			BD=ds.getConnection();
    			Statement s = BD.createStatement();
    			//insertion dans la base
     
    			String sql  = "SELECT * FROM score";
    			ResultSet resultat = s.executeQuery(sql);
    			//on place le curseur sur le dernier tuple
    			resultat.last();
    			//on récupère le numéro de la ligne
    			int nombreLignes = resultat.getRow();
    			//on repace le curseur avant la première ligne
    			resultat.beforeFirst();
    			System.out.println("Ce ResultSet contient "+nombreLignes+" lignes.");
    			if(nombreLignes > 1){
    			    s.executeUpdate("DELETE * FROM score WHERE MIN(score) ");
    			    s.executeUpdate("INSERT INTO score VALUES('"+this.nom+"','"+this.Score+"','"+this.niveau+"')");
    				s.close();
    				BD.close();
    			}else{
    				s.executeUpdate("INSERT INTO score VALUES('"+this.nom+"','"+this.Score+"','"+this.niveau+"')");
    				s.close();
    				BD.close();
    				s = null;
    			}
    			return true;
     
    		}
    		catch (java.sql.SQLException ex) {
    				System.out.println("Erreur d'exécution de la requête SQL \n"+ex);
    				return false;
    		}
    	}

    je pense il y a un problème avec la requête sql delete car l'insertion avant fonctionner mais je pense avoir respecter la syntaxe auriez-vous une idée?

    Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lookup de tetris
    Ce ResultSet contient 7 lignes.
    Erreur d'exécution de la requête SQL 
    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 score WHERE MIN(score)' at line 1

    Merci de prendre encore de prendre de votre temps cordialement.

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java/JavaEE
    Inscrit en
    Août 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java/JavaEE

    Informations forums :
    Inscription : Août 2014
    Messages : 194
    Points : 290
    Points
    290
    Par défaut
    En effet, une énorme erreur dans ta requête de suppression, il s'agit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete from table where condition
    tu dois faire attention a ce genre d'erreur que tu peux facilement l'évité avec une simple recherche sur comment écrire une requête de suppression.

  5. #5
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    Merci de votre réponse, donc je ne peux pas utiliser la fonction MIN je voulais supprimer celui qui à le plus petit score comment puis je faire s'il vous plaît ?

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Java/JavaEE
    Inscrit en
    Août 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java/JavaEE

    Informations forums :
    Inscription : Août 2014
    Messages : 194
    Points : 290
    Points
    290
    Par défaut
    marchera jamais.

    Tu ne peux pas utiliser des fonctions d'agrégat dans WHERE.. Utilise HAVING au pire.

    Mais pour un DELETE ça semble facile pour ton cas mais en réalité c'est un peu complexe.

    J'ai essayé de faire une reqête imbriqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE from utilisateur where id IN (select MIN(id) from utilisateur group by login)
    ça génère une erreur parce qu'on ne peux pas spécifier la mêmea table pour un DELEtE(SELECT MIN(id)), ça semble bizarre surtout que ça a marché bien dans une requête de selection SELECT(SELECT MIN(id)).

    En attendant ,pour une solution momentané je te conseil de récupérer l'id dans une requête et de le passé en paramètre pour ta requête de suppression.

  7. #7
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    J'ai trouvé
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM score WHERE id=(SELECT min(score) FROM score)
    Merci encore pour vos réponses.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/06/2014, 14h50
  2. Réponses: 2
    Dernier message: 04/05/2014, 01h26
  3. Réponses: 3
    Dernier message: 27/03/2012, 15h49
  4. [MySQL] erreur dans une boucle ?You have an error in your SQL syntax; check the manual that c
    Par keokaz dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 18/10/2008, 00h08
  5. You have an error in your SQL syntax; check the manual ..
    Par Spaccio dans le forum Requêtes
    Réponses: 5
    Dernier message: 09/07/2006, 18h39

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