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

  1. #1
    Membre du Club
    Femme Profil pro
    Ingénieur en Télécommunication
    Inscrit en
    octobre 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur en Télécommunication
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2017
    Messages : 114
    Points : 65
    Points
    65

    Par défaut Insérer ' depuis un textField

    Bonsoir,

    je veux insérer un mot dans ma table contenant ' en utilisant un preparestatement query mais j'ai toujours une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     statement = connection.prepareStatement("INSERT INTO Projet ( Nom , date_de_début,   date_de_fin, Nombre_de_logements  , Adresse, Type_de_logements ) VALUES('"+nom.getText()+"','"+ dated.getText()+"','" + datef.getText()+"',"+ nbr.getText()+",'"+adresse.getText()+ "','" +textField.getText()+ "')");
    			  statement.executeUpdate();

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    11 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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 : 11 459
    Points : 26 879
    Points
    26 879
    Billets dans le blog
    2

    Par défaut

    Salut,

    C'est parce qu'on ne doit pas utiliser de concaténation de String avec un PreparedStatement. Pour l'utiliser, on met ? à la place des valeurs variables, et on utilise le setter adapté pour affecter la valeur.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PreparedStatement statement = con.preparedStatement("SELECT truc FROM table WHERE nom = ? and value > ? "); 
    statement.setString(1, jtextfield1.getText());
    statement.setInt(2, Integer.parsetInt(jtextfield2.getText()));
    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
    Femme Profil pro
    Ingénieur en Télécommunication
    Inscrit en
    octobre 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur en Télécommunication
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2017
    Messages : 114
    Points : 65
    Points
    65

    Par défaut

    Merci beaucoup je vais le changer

  4. #4
    Membre du Club
    Femme Profil pro
    Ingénieur en Télécommunication
    Inscrit en
    octobre 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur en Télécommunication
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2017
    Messages : 114
    Points : 65
    Points
    65

    Par défaut another problem

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       	 statement = connection.prepareStatement("INSERT INTO Versement ( Nom , Prenom, Date , Somme_versee,Prix_du_logement, Nom_du_projet, Versement_total, Versement_restant) VALUES(?,?,?,?,?,?,?,?");
     
     
    			 statement.setString(1, nom.getText());
    			 statement.setString(2, prenom.getText());
    			 statement.setString(3, date.getText());
    			 statement.setString(4, verse.getText());
    			statement.setString(5, "SELECT Prix_du_logement FROM Client WHERE Nom='"+ nom.getText() +"' AND Prenom='"+ prenom.getText() + "'");
    			 statement.setString(6, ("SELECT Nom_du_projet FROM Client WHERE Nom='" + nom.getText()+ "' AND Prenom='" +prenom.getText()+ "'"));
    			 statement.setString(7, ("SELECT SUM(Somme_versee) + " + verse.getText() +" FROM Versement WHERE Nom='"+ nom.getText() + "' AND Prenom='"+ prenom.getText()+ "'"));
    			 statement.setString(8,("SELECT (Versement_restant - " +  verse.getText() +") From Versement WHERE Nom='" +nom.getText() + "' AND Prenom='" + prenom.getText()+"'"+ ")"   +")"));


    voici ce que j'ai fait mais pour les 4 derniéres lignes , j'ai dans ma base de données des requêtes SQL et non pas leurs résultats , j'ai essayé de faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    			 statement = connection.prepareStatement("INSERT INTO Versement ( Nom , Prenom, Date , Somme_versee,Prix_du_logement, Nom_du_projet, Versement_total, Versement_restant) VALUES(?,?,?,?,"+ ("SELECT Prix_du_logement FROM Client WHERE Nom='"+ nom.getText() +"' AND Prenom='"+ prenom.getText() + "'")+",?,?,?");
     
    			 statement.setString(1, nom.getText());
    			 statement.setString(2, prenom.getText());
    			 statement.setString(3, date.getText());
    			 statement.setString(4, verse.getText());
    			//statement.setString(5, "SELECT Prix_du_logement FROM Client WHERE Nom='"+ nom.getText() +"' AND Prenom='"+ prenom.getText() + "'");
    			 statement.setString(6, ("SELECT Nom_du_projet FROM Client WHERE Nom='" + nom.getText()+ "' AND Prenom='" +prenom.getText()+ "'"));
    			 statement.setString(7, ("SELECT SUM(Somme_versee) + " + verse.getText() +" FROM Versement WHERE Nom='"+ nom.getText() + "' AND Prenom='"+ prenom.getText()+ "'"));
    			 statement.setString(8,("SELECT (Versement_restant - " +  verse.getText() +") From Versement WHERE Nom='" +nom.getText() + "' AND Prenom='" + prenom.getText()+"'"+ ")"   +")"));

  5. #5
    Membre du Club
    Femme Profil pro
    Ingénieur en Télécommunication
    Inscrit en
    octobre 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur en Télécommunication
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2017
    Messages : 114
    Points : 65
    Points
    65

    Par défaut another problem

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       	 statement = connection.prepareStatement("INSERT INTO Versement ( Nom , Prenom, Date , Somme_versee,Prix_du_logement, Nom_du_projet, Versement_total, Versement_restant) VALUES(?,?,?,?,?,?,?,?");
     
     
    			 statement.setString(1, nom.getText());
    			 statement.setString(2, prenom.getText());
    			 statement.setString(3, date.getText());
    			 statement.setString(4, verse.getText());
    			statement.setString(5, "SELECT Prix_du_logement FROM Client WHERE Nom='"+ nom.getText() +"' AND Prenom='"+ prenom.getText() + "'");
    			 statement.setString(6, ("SELECT Nom_du_projet FROM Client WHERE Nom='" + nom.getText()+ "' AND Prenom='" +prenom.getText()+ "'"));
    			 statement.setString(7, ("SELECT SUM(Somme_versee) + " + verse.getText() +" FROM Versement WHERE Nom='"+ nom.getText() + "' AND Prenom='"+ prenom.getText()+ "'"));
    			 statement.setString(8,("SELECT (Versement_restant - " +  verse.getText() +") From Versement WHERE Nom='" +nom.getText() + "' AND Prenom='" + prenom.getText()+"'"+ ")"   +")"));


    voici ce que j'ai fait mais pour les 4 derniéres lignes , j'ai dans ma base de données des requêtes SQL et non pas leurs résultats , j'ai essayé de faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    			 statement = connection.prepareStatement("INSERT INTO Versement ( Nom , Prenom, Date , Somme_versee,Prix_du_logement, Nom_du_projet, Versement_total, Versement_restant) VALUES(?,?,?,?,"+ ("SELECT Prix_du_logement FROM Client WHERE Nom='"+ nom.getText() +"' AND Prenom='"+ prenom.getText() + "'")+",?,?,?");
     
    			 statement.setString(1, nom.getText());
    			 statement.setString(2, prenom.getText());
    			 statement.setString(3, date.getText());
    			 statement.setString(4, verse.getText());
    			//statement.setString(5, "SELECT Prix_du_logement FROM Client WHERE Nom='"+ nom.getText() +"' AND Prenom='"+ prenom.getText() + "'");
    			 statement.setString(6, ("SELECT Nom_du_projet FROM Client WHERE Nom='" + nom.getText()+ "' AND Prenom='" +prenom.getText()+ "'"));
    			 statement.setString(7, ("SELECT SUM(Somme_versee) + " + verse.getText() +" FROM Versement WHERE Nom='"+ nom.getText() + "' AND Prenom='"+ prenom.getText()+ "'"));
    			 statement.setString(8,("SELECT (Versement_restant - " +  verse.getText() +") From Versement WHERE Nom='" +nom.getText() + "' AND Prenom='" + prenom.getText()+"'"+ ")"   +")"));

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

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

    Informations forums :
    Inscription : avril 2007
    Messages : 25 454
    Points : 48 719
    Points
    48 719

    Par défaut

    ben oui, le but c'est justement d'éviter l'injection sql en t'empêchant de mettre du sql dans tes valeurs.

    tu dois créer ta requête complete dans le prepared statement, en remplacant seulement les valeur par des ? . Les ? sont juste des valeurs, pas du code sql.
    De plus on ne peux pas mettre un select à la place d'un champ d'un manière générale en SQL. Commence par créer un requête SQL qu fonctionne dans ton outils SQL. Après seulement essaie de la traduire en statement java. Ca ne sert à rien d'exécuter ne java du sql invalide.

  7. #7
    Membre du Club
    Femme Profil pro
    Ingénieur en Télécommunication
    Inscrit en
    octobre 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur en Télécommunication
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2017
    Messages : 114
    Points : 65
    Points
    65

    Par défaut

    Avant de passer de createStetement à preparedStatement ça marché ( select imbriqué dans insert)

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

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

    Informations forums :
    Inscription : avril 2007
    Messages : 25 454
    Points : 48 719
    Points
    48 719

    Par défaut

    bizarre mais bon si tu as une requête qui marche, je vais partir du principe que tu as raison, il faut juste changer les valeurs venant des input par des ?


    un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     statement = connection.prepareStatement("INSERT INTO Versement ( Nom , Prenom, Date , Somme_versee,Prix_du_logement, Nom_du_projet, Versement_total, Versement_restant) "+
              " VALUES(?,?,?,?,"+ 
                           " (SELECT Prix_du_logement FROM Client WHERE Nom= ?  AND Prenom=?), "+
                           " (SELECT Nom_du_projet FROM Client WHERE Nom=? AND Prenom=?), "+
                           " (SELECT SUM(Somme_versee)  FROM Versement WHERE Nom=? AND Prenom=?))");

  9. #9
    Membre du Club
    Femme Profil pro
    Ingénieur en Télécommunication
    Inscrit en
    octobre 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur en Télécommunication
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2017
    Messages : 114
    Points : 65
    Points
    65

    Par défaut

    j'ai fait dans une jframe et ça ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    statement = connection.prepareStatement("INSERT INTO Versement ( Nom , Prenom, Date , Somme_versee,Prix_du_logement, Nom_du_projet, Versement_total, Versement_restant) VALUES(?,?,?,?," + "(SELECT Prix_du_logement FROM Client WHERE Nom='"+ nom.getText() +"' AND Prenom='"+ prenom.getText() + "')," + "(SELECT Nom_du_projet From Client WHERE Nom='"+ nom.getText()+"' AND Prenom='"+ prenom.getText()+"'),"+ "(SELECT SUM(Somme_versee) + " + verse.getText() +" FROM Versement WHERE Nom='"+ nom.getText() + "' AND Prenom='"+ prenom.getText()+ "'),"+"(SELECT (Versement_restant - " +  verse.getText() +") From Versement WHERE Nom='" +nom.getText() + "' AND Prenom='" + prenom.getText()+"'"+ ")"    +")");            
     
     
    			 statement.setString(1, nom.getText());
    			 statement.setString(2, prenom.getText());
    			 statement.setString(3, date.getText());
    			 statement.setString(4, verse.getText());
    par contre, j'ai suivi le même principe dans une autre requête et ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    			  statement= connection.prepareStatement("INSERT INTO Versement ( Nom , Prenom, Somme_versee, Nom_du_projet, Prix_du_logement,  Date, Versement_restant ) VALUES (?,?,?,?,?,?," + (textField.getText() + "-" +  versement.getText()) +" )");
    			  statement.setString(1, nom.getText());
    			  statement.setString(2, prenom.getText());
    			  statement.setString(3, versement.getText());
    			  statement.setString(4,comboBox.getSelectedItem().toString());
    			  statement.setString(5, textField.getText());
    			  statement.setString(6, date.getText());

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    11 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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 : 11 459
    Points : 26 879
    Points
    26 879
    Billets dans le blog
    2

    Par défaut

    "ça marche pas" ne veut rien dire. Si tu as une erreur, indique-nous laquelle. Et le premier extrait de code que tu montres ne suit pas le principe énoncé (il y a concaténation avec des valeurs et non utilisation du ?).
    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.

  11. #11
    Membre du Club
    Femme Profil pro
    Ingénieur en Télécommunication
    Inscrit en
    octobre 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur en Télécommunication
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2017
    Messages : 114
    Points : 65
    Points
    65

    Par défaut

    c'est bon je l'ai résolu, il fallait que je remplace les valeurs par des ?
    Merci beaucoup

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

Discussions similaires

  1. insérer image depuis vba
    Par Sebastien_INR59 dans le forum Access
    Réponses: 1
    Dernier message: 28/06/2006, 12h45
  2. Insérer du texte dans un champ depuis un lien (smiley)
    Par arnolem dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/04/2006, 12h27
  3. Charger une image depuis un textfield [noob]
    Par yodark dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/04/2006, 09h36
  4. [VBA-A]Insérer du texte depuis Access
    Par soad029 dans le forum VBA Access
    Réponses: 5
    Dernier message: 10/03/2006, 16h32
  5. Insérer un tableau sous Word depuis Delphi
    Par muquet dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 12h59

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