1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur en Télécommunication
    Inscrit en
    octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Algérie

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

    Informations forums :
    Inscription : octobre 2017
    Messages : 41
    Points : 24
    Points
    24

    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/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 399
    Points : 24 920
    Points
    24 920
    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()));
    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 à l'essai
    Femme Profil pro
    Ingénieur en Télécommunication
    Inscrit en
    octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Algérie

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

    Informations forums :
    Inscription : octobre 2017
    Messages : 41
    Points : 24
    Points
    24

    Par défaut

    Merci beaucoup je vais le changer

  4. #4
    Membre à l'essai
    Femme Profil pro
    Ingénieur en Télécommunication
    Inscrit en
    octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Algérie

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

    Informations forums :
    Inscription : octobre 2017
    Messages : 41
    Points : 24
    Points
    24

    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 à l'essai
    Femme Profil pro
    Ingénieur en Télécommunication
    Inscrit en
    octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Algérie

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

    Informations forums :
    Inscription : octobre 2017
    Messages : 41
    Points : 24
    Points
    24

    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 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

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

    Informations forums :
    Inscription : avril 2007
    Messages : 25 212
    Points : 48 228
    Points
    48 228

    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.
    David Delbecq Java developer chez HMS Industrial Networks AB.     LinkedIn | Google+

  7. #7
    Membre à l'essai
    Femme Profil pro
    Ingénieur en Télécommunication
    Inscrit en
    octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Algérie

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

    Informations forums :
    Inscription : octobre 2017
    Messages : 41
    Points : 24
    Points
    24

    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 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

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

    Informations forums :
    Inscription : avril 2007
    Messages : 25 212
    Points : 48 228
    Points
    48 228

    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=?))");
    David Delbecq Java developer chez HMS Industrial Networks AB.     LinkedIn | Google+

  9. #9
    Membre à l'essai
    Femme Profil pro
    Ingénieur en Télécommunication
    Inscrit en
    octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Algérie

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

    Informations forums :
    Inscription : octobre 2017
    Messages : 41
    Points : 24
    Points
    24

    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/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 399
    Points : 24 920
    Points
    24 920
    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 ?).
    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 à l'essai
    Femme Profil pro
    Ingénieur en Télécommunication
    Inscrit en
    octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Algérie

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

    Informations forums :
    Inscription : octobre 2017
    Messages : 41
    Points : 24
    Points
    24

    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 JavaScript
    Réponses: 5
    Dernier message: 26/04/2006, 12h27
  3. Charger une image depuis un textfield [noob]
    Par yodark dans le forum 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