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 :

problème de chaine de caractère


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut problème de chaine de caractère
    bonjour
    je récupère un string depuis un champs de saisi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     String ref=recepForm.getRef();
    et pour l'insérer dans ma base je fais la requete suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rs8=st8.executeQuery("insert into  gss_transaction values('"+maxx+"','REC','"+whh+"',SYSDATE,'"+act+"','"+idfour+"','"+ref+"','"+note+"','"+po+"','','','','N')");
    mais quand je sais un mot avec l'apostrophe '
    y'a l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.sql.SQLException: ORA-00917: Virgule absente
    comme si l'apostrophe à partagé ma requete

    ??

  2. #2
    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,


    Utilises des PreparedStatements !!!

    a++

  3. #3
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    La syntaxe standard d'insertion d'une zone texte est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into  ma_table values('mon texte avant sans apostrophe')
    donc, si tu as une apostrophe, ça ne marche plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into  ma_table values('mon texte d'après')
    solution : utilise un PreparedStatement qui devrait résoudre les galères de guillemets
    ou alors, regarde la doc Oracle et tu dois y trouver une directive du genre doubler l'apostrophe ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into  ma_table values('mon texte d''après')
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  4. #4
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut
    voila ce que j'ai fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    	  String sql = "insert into transaction values('"+maxx+"','REC','"+whh+"',SYSDATE,'"+act+"','"+idfour+"',TRANS_NOTES=?,'"+po+"','','','','N')";
    //	préparation de la requête
    	PreparedStatement preparedStatement = con.prepareStatement(sql);
     
    //	on assigne une chaîne de caractères au troisième
    	preparedStatement.setString(1,note);
     
    //	exécution de la requête
    	preparedStatement.executeUpdate();
    mais j'ai toujours le message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.sql.SQLException: ORA-00917: Virgule absente
    ???

  5. #5
    Membre habitué Avatar de erictoguem
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 187
    Points
    187
    Par défaut
    les preparedstatement repondent à ton problème, bien!!!
    JAVA : Plus qu'un langage, une façon de penser

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut Syntaxe SQL
    à mon avis il y a une erreur dans la syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String sql = "insert into transaction values(... "',TRANS_NOTES=?,'"...)";
    Je pense que tu mélanges la syntaxe pour INSERT avec la syntaxe pour UPDATE.
    INSERT n'accepte pas de nom de champ dans la liste des valeurs définie par VALUES(...)

    exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String sql = "UPDATE Stocks SET prix = ?, quantite = ? WHERE nom = ?";
    String sql = "INSERT INTO Annuaire (nom, prenom, tel) VALUES(?,?,?)";
    tu vois la différence ?

    par ailleurs, je pense que tu liras avec intérêt les astuces du PreparedStatement dans la FAQ

    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #7
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Pour gerer le probleme avec les apostrophes, il suffit de les doubler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //on remplace les ' par ''
     String ref=recepForm.getRef().replace("'", "''");

  8. #8
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut
    t'a raison"darrylsite" j'ai essayé ta solution est ça marche bien j'éspère seulement que c'est juste les apostrophes qui posent problèmes avec les requetes ?

  9. #9
    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
    Citation Envoyé par john_wili Voir le message
    t'a raison"darrylsite" j'ai essayé ta solution est ça marche bien j'éspère seulement que c'est juste les apostrophes qui posent problèmes avec les requetes ?
    Justement non et surtout cela peut dépendre du serveur SQL...

    Comme indiqué la solution permettant d'éviter tout problème est de passer par des PreparedStatements...

    a++

  10. #10
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut
    d'aprés ce que j'ai lu dans la faq voila ce que j'ai fais:
    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
     
      String ref=recepForm.getRef();
     String po=recepForm.getPO();
    String note=recepForm.getNote();
     
      String sql = "insert into  gss_trans(no,type,id,date,act_id,dest_id,ext_ref,notes,no_po,date_limite,dest,approver,annuler) values('"+maxx+"','REC','"+whh+"',SYSDATE,'"+act+"','"+idfour+"',?,?,?,'','','','N')";
    //	préparation de la requête
    	PreparedStatement preparedStatement = con.prepareStatement(sql);
     
    //	on assigne une chaîne de caractères au troisième
    preparedStatement.setString(1,ref);
    preparedStatement.setString(2,note);
    preparedStatement.setString(3,po);
     
    //	exécution de la requête
    	preparedStatement.executeUpdate();
    et ça marche bien MERCI tous pour votre aide

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

Discussions similaires

  1. Problème avec chaine de caractères
    Par Nicegame dans le forum C
    Réponses: 7
    Dernier message: 27/04/2007, 18h35
  2. problème de chaine de caractère
    Par franco82 dans le forum C++
    Réponses: 10
    Dernier message: 01/12/2006, 20h32
  3. Problème fonctions chaines de caractères.
    Par Hayron06 dans le forum C
    Réponses: 12
    Dernier message: 13/11/2006, 21h47
  4. [MySQL] problème de chaine de caractère
    Par Leinad dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/10/2006, 14h52
  5. [FLASH 8] Problème de chaine de caractère
    Par dom_dev dans le forum Flash
    Réponses: 7
    Dernier message: 02/03/2006, 17h42

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