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

avec Java Discussion :

Requête SQL avec JAVA


Sujet :

avec Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Points : 104
    Points
    104
    Par défaut Requête SQL avec JAVA
    Bonsoir, j'ai un petit problème d'exécution de requête sql.

    Voici ma requéte que je veux exécuter à partir de ma JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String query = "insert into livre(id_livre,titre,auteur,prix)values (" + this.livre.getIdLivre()+ ","+this.livre.getTitre()+","+this.livre.getAuteur()+","+this.livre.getPrix() +")";
    Lorsque j'accède à mon formulaire depuis ma JSP, J'obtiens ceci dans la console d'eclipse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Problème sur la requête : insert into livre(id_livre,titre,auteur,prix)values (3,Programmer en JAVA,C. delannoy,23.0)
    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 'en JAVA,C. delannoy,23.0)' at line 1 : 1064
    Alors il me récupère bien ce qui est entré en paramètre, mais il n'arrive pas à insérer l'ajout du livre dans la base de donnée !

    Est ce que j'ai un problème de syntaxe ? Car j'ai vérifié plusieurs fois. je ne voix pas d'où peut venir le problème.

    Est ce que quelqu'un aurait une idée ?

  2. #2
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 43
    Points : 64
    Points
    64
    Par défaut
    Bonsoir,

    essaye comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String query = "insert into livre(id_livre,titre,auteur,prix)values ('" + this.livre.getIdLivre()+ "','"+this.livre.getTitre()+"','"+this.livre.getAuteur()+"','"+this.livre.getPrix() +"')";
    Cordialement,
    dali.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    Merci, je vais voir ce que ça donne.

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Attention car ce code n'est pas sûr du tout ! La moindre quote dans le titre du livre pourrait casser le code SQL.
    Non seulement tu peux avoir des erreurs inattendus comme celle là, mais tu cours le risque d'actes malveillants via SQL-Injection.

    Il est préférable de passer par les PreparedStatement !!

    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
    // 1. On utilises des ? pour les valeurs de notre requête :
    String query = "insert into livre(id_livre,titre,auteur,prix) values (?, ?, ?, ?)";
     
    // 2. On crée notre PreparedStatement :
    PreparedStatement ps = con.prepareStatement(query);
    try {
    	// 3. On défini les valeurs de chacune des ? selon leurs types :
    	ps.setInt(1, this.livre.getIdLivre());
    	ps.setString(2, this.livre.getIdLivre());
    	ps.setString(3, this.livre.getIdLivre());
    	ps.setDouble(4, this.livre.getIdLivre());
     
    	// 4. On exécute notre update :
    	int result = ps.executeUpdate();
     
    } finally {
    	ps.close();
    }
    a++

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    Merci pour vos précisions. Je suis finalement passé par le PreparedStatement !

    L'insertion se fait très bien dans la base de données. c'est visible dans ma console dos.

    Par contre j'ai une erreur au niveau dans la console d'eclipse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Problème sur la requête : insert into livre(id_livre,titre,auteur,prix) values (?, ?, ?, ?)
    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 '?, ?, ?, ?)' at line 1 : 1064
    Je crois qu'il y a quelque chose qu'il n'aime pas dans la manière d'écrire la syntaxe !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    Voila le morceau de 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
    try {
     
    			new MysqlConnection();
    			MysqlConnection mysql = MysqlConnection.getInstance();
     
    			ResultSet rs = mysql.getQuery("SELECT MAX(id_livre) as max_id_livre FROM livre");
    			while (rs.next()) {
    				int newId = rs.getInt("max_id_livre") + 1;
    				this.livre.setIdLivre(newId);
    			}
     
    			con = MysqlConnection.openConnection();
    			//String query = "INSERT INTO livre VALUES(" + this.livre + ")";
    		    //String query = "insert into livre(id_livre,titre,auteur,prix)values (" + this.livre.getIdLivre()+ ","+this.livre.getTitre()+","+this.livre.getAuteur()+","+this.livre.getPrix() +")";
     
    			String query = "insert into livre(id_livre,titre,auteur,prix) values (?, ?, ?, ?)";
    			PreparedStatement ps = con.prepareStatement(query);
    			try {
    				ps.setInt(1, this.livre.getIdLivre());
    				ps.setString(2, this.livre.getTitre());
    				ps.setString(3, this.livre.getAuteur());
    				ps.setFloat(4, this.livre.getPrix());
     
    				res = ps.executeUpdate();
     
    			}
    			finally{
    				System.out.println("Il y a eu "+ res+" ajout dans la base !");
    			} 
     
    			mysql.execQuery(query);
     
    		} catch(Exception e){
     
    			e.getStackTrace();
    		}
     
     
    		return "SUCCESS";

  7. #7
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Problème sur la requête : insert into livre(id_livre,titre,auteur,prix) values (?, ?, ?, ?)
    On peux voir le code qui affiche çà? Parce qu'il n'est pas présent là? D'autant que vous dires que votre insert se fait bien -> Je suppose que vous avez aussi cette requete, mal utilisée ailleurs dans votre code.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    je l'ai mis le code !

  9. #9
    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
    j'aimerais voir le code où vous écrivez dans la console "problème avec la requête", car, ce n'est pas ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    } catch(Exception e){
     
    			e.getStackTrace();
    		}

    qui va le faire. e plus, éclaircissez votre message. Vous dite d'un coté que vous avez un message d'erreur, et de l'autre vous dites que les insertions se font bien. Ce n'est pas clair tout ça

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    J'ai un message d'erreur dans la console ! par contre l'insertion est bien efféctuer dans ma base de donnée mysql ( fenêtre dos) :

    voila 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
    78
    package tools;
    import java.sql.*;
     
    public class MysqlConnection {
     
    	private static MysqlConnection instance;
    	private static Connection c;
    	private static Statement instruction;
     
    	public static MysqlConnection getInstance (  ) {
     
            if (instance == null) {
                instance = new MysqlConnection();
            }
            return instance;
        }
     
    	public MysqlConnection (  ) {
     
    		openConnection();
    	}
     
    	public static Connection openConnection (  ) {
     
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    			c = DriverManager.getConnection("jdbc:mysql://localhost/esiag", "root", "");
    			instruction = c.createStatement();
    			System.out.println("Connexion établie");
    		} catch (ClassNotFoundException e) {
    			System.out.println(e.getMessage());
    		}catch (SQLException e) {
    			System.out.println(e.getMessage() + " : " + e.getErrorCode());
    		}
    		return c;
    	}
     
    	public ResultSet getQuery ( String query ) {
     
    		try {
    			ResultSet res = instruction.executeQuery(query);
    			System.out.println("Requête executé correctement : " + query);
    			//closeConnection();
    			return res;
    		} catch (SQLException e) {
    			System.out.println("Problème sur la requête : " + query);
    			System.out.println(e.getMessage() + " : " + e.getErrorCode());
    			return null;
    		}
     
    	}
     
     
    	public void execQuery ( String query ) {
     
    		try {
    			instruction.executeUpdate(query);
    			System.out.println("Requête executé : " + query);
    			//closeConnection();
    		} catch (SQLException e) {
    			System.out.println("Problème sur la requête : " + query);
    			System.out.println(e.getMessage() + " : " + e.getErrorCode());
    		}
     
    	}
     
    	@SuppressWarnings("unused")
    	private void closeConnection (  ) {
     
    		try {
    			c.close();
    		} catch (SQLException e) {
    			System.out.println(e.getMessage() + " : " + e.getErrorCode());
    		}
    	}
     
     
    }

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Après ton finally, il traine un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql.execQuery(query);
    Retire-le
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. requête sql avec clause INNER JOIN
    Par new_wave dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/08/2005, 15h47
  2. Requête SQL avec une réponse unique
    Par Glutinus dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/07/2005, 16h35
  3. 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
  4. requête SQL avec paramètre en vb avec base de donnée SQL srv
    Par dialydany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2005, 10h33
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

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