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

Java Discussion :

Fonction replace java


Sujet :

Java

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Points : 76
    Points
    76
    Par défaut Fonction replace java
    Bonjour
    je veux éviter le problème d'apostrophe sur les champs d'une requette SQL
    donc pour cela j'ai utilisé une fonction pour remplacer l'apostrophe par 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public String DoubleGuillemets(String chaine){
      chaine = Replace(chaine, "'", "''");
     chaine=DoubleGuillemets(chaine);
    return chaine ;
    }
    l'erreur est sur la ligne de replace() il m'affiche que la fonction doit contenir 3 string et c'est çà ce j'ai mais je sais pas quoi le problème

    cannot find symbol
    symbol: method Replace(String,String,String)
    Merci

  2. #2
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Points : 76
    Points
    76
    Par défaut
    bon j'ai essayé de faire çà aucune erreur mais plein des erreurs lorsque j'exécute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public String DoubleGuillemets(String chaine){
      chaine = chaine.replace("'", "''");
     chaine=DoubleGuillemets(chaine);
    return chaine ;
    }
    Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
    at java.lang.String.codePointAt(String.java:689)
    at java.util.regex.Pattern.compile(Pattern.java:1642)
    at java.util.regex.Pattern.<init>(Pattern.java:1337)
    at java.util.regex.Pattern.compile(Pattern.java:1047)
    at java.lang.String.replace(String.java:2180)

  3. #3
    Membre éprouvé Avatar de Momoth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 318
    Points : 1 236
    Points
    1 236
    Par défaut
    Bonjour,

    Ton problème vient de ta récursivité, tu fais une boucle infinis dans le sens où tu n'atteindras jamais le return de ta fonction car tu l'as rapelle elle même avant. (Désolé je suis peut etre pas clair).

    Edit : D'après ce que j'ai compris tu veux remplacer toutes les occurences "quote" par "double quote".

    Peut être le code suivant peut t'aider :

    public String DoubleGuillemets(String chaine)
    {
    chaine = chaine.replaceAll("'", "''");
    return chaine ;
    }

    Bonne soirée.

    -- Momoth --
    La Triforce du développement : Fainéantise, Curiosité et Imagination.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Par ailleurs, pour éviter les problèmes d'apostrophes et les autres problèmes dans les requêtes SQL, on utilise les PreparedStatement, qui elles, au moins, sont faites pour et pensent à tout.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Points : 76
    Points
    76
    Par défaut
    voulez vous dire que je dois pas faire le return??

  6. #6
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Points : 76
    Points
    76
    Par défaut
    @thelvin pour le preparedstatement je peux l'utiliser dans ma requette parce que je faite un insert where not exists

  7. #7
    Membre habitué
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Citation Envoyé par cisco.nat Voir le message
    voulez vous dire que je dois pas faire le return??
    Non, tu dois éviter la récursivité :


    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public String DoubleGuillemets(String chaine){
      chaine = chaine.replaceAll("'", "''");
    return chaine ;
    }

    ou utiliser un prepareStatement pour ne plus avoir à te préoccuper de ces détails

  8. #8
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Points : 76
    Points
    76
    Par défaut
    Oui exactement mais mois j'ai des requettes insert where not exists donc je peux pas utiliser des preparedstatement par exemple
    cette requette contient un insert simple ca marche avec le preparedstatement et c'est ce que j'avais au début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    PreparedStatement pst_ci=conn.prepareStatement("INSERT INTO ci(VLAN,client,JR,vrf,address) VALUES(?,?,?,?,?)");
            pst_ci.setInt(1,srv.getvlan());	
            pst_ci.setString(2,convertNullToEmptyString(srv.getdesc()));
    	pst_ci.setString(3,convertNullToEmptyString(srv.getjr()));
    	pst_ci.setString(4,convertNullToEmptyString(srv.getvrf()));
    	pst_ci.setString(5,convertNullToEmptyString(srv.getaddress()));
    	pst_ci.executeUpdate();
             }
    Mais comment je vais faire avec des insert where not exists qui contiet des where comme çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "INSERT INTO tout(VLAN,client)\n" +
    "SELECT DISTINCT '"+srv.getvlan()+"','"+DoubleGuillemets(srv.getdesc())+"' FROM dual WHERE NOT EXISTS \n" +
    "(SELECT VLAN,client FROM tout WHERE VLAN = '"+srv.getvlan()+"' AND client='"+DoubleGuillemets(srv.getdesc())+"')" ;

  9. #9
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Points : 76
    Points
    76
    Par défaut
    Bon le replaceAll çà marche pas

  10. #10
    Membre habitué
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Hmm, après vérification de la javadoc, le replace remplace déjà toutes les occurrences et le replaceAll servirait à traiter des regex.

    donc ça devrait fonctionner avec replace et sans appel récursif:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public String DoubleGuillemets(String chaine){
      chaine = chaine.replace("'", "''");
    return chaine ;
    }

  11. #11
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Points : 76
    Points
    76
    Par défaut
    non c'est ce que j'ai fait eu début çà marche pas malheureusement

  12. #12
    Membre habitué
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Peux tu nous donner un exemple d'entrée et de sortie ou ça ne fonctionne pas de la fonction telle quelle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public String DoubleGuillemets(String chaine){
      chaine = chaine.replace("'", "''");
    return chaine ;
    }
    afin de voir ou ce situe le problème.

  13. #13
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Points : 76
    Points
    76
    Par défaut
    INSERT INTO tout(VLAN,client)
    SELECT DISTINCT '7',' : M_CPE
    ' FROM dual WHERE NOT EXISTS
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at swing.bdd.DoubleGuillemets(bdd.java:30)
    at swing.bdd.jButton2ActionPerformed(bdd.java:376)
    at swing.bdd.access$300(bdd.java:26)
    at swing.bdd$4.actionPerformed(bdd.java:125)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:682)
    at java.awt.EventQueue$3.run(EventQueue.java:680)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:696)
    at java.awt.EventQueue$4.run(EventQueue.java:694)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
    (SELECT VLAN,client FROM tout WHERE VLAN = '7' AND client=' : M_CPE

    voilà la requette :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "INSERT INTO tout(VLAN,client)\n" +
    "SELECT DISTINCT '"+srv.getvlan()+"','"+DoubleGuillemets(srv.getdesc())+"' FROM dual WHERE NOT EXISTS \n" +
    "(SELECT VLAN,client FROM tout WHERE VLAN = '"+srv.getvlan()+"' AND client='"+DoubleGuillemets(srv.getdesc())+"')" ;

  14. #14
    Membre habitué
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Une nullPointerexception.

    C'est que tu as probablement passé une valeur nulle à ta fonction DoubleGuillemets.

    Ton problème se situe donc dans l'appel de cette fonction.
    Il est probable que cet appel : srv.getdesc() te renvoie parfois null.

  15. #15
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Points : 76
    Points
    76
    Par défaut
    Bon j'ai fait une fonction qui convertis le null to string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public static String convertNullToEmptyString(String data){
    	    if(data!=null){
    			return data;
    		}
    		else{
    			return "";
    		}
    	}
    et j'ajoute dans la requette ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "INSERT INTO tout(VLAN,client)\n" +
    "SELECT DISTINCT '"+srv.getvlan()+"','"+convertNullToEmptyString(DoubleGuillemets(srv.getdesc()))+"' FROM dual WHERE NOT EXISTS \n" +
    "(SELECT VLAN,client FROM tout WHERE VLAN = '"+srv.getvlan()+"' AND client='"+convertNullToEmptyString(DoubleGuillemets(srv.getdesc()))+"')" ;
    Mais encore les mêmes erreurs :s

  16. #16
    Membre habitué
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    C'est normal, tu appelle ta fonction pour convertir null en string après la fonction doubleGuillemet alors que tu devrais l'appeler avant.

    fait

    DoubleGuillemets(convertNullToEmptyString(srv.getdesc()))

    au lieu de

    convertNullToEmptyString(DoubleGuillemets(srv.getdesc()))

  17. #17
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Points : 76
    Points
    76
    Par défaut
    Enfin çà marche Merci bien et désolé

  18. #18
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Cool que tu aies enfin réussi à faire marcher String.replace(). Comme quoi tout arrive.

    Mais je maintiens qu'il fallait utiliser PreparedStatement.

    Citation Envoyé par cisco.nat Voir le message
    Mais comment je vais faire avec des insert where not exists qui contiet des where comme çà:
    Exactement de la même manière qu'on utilise toujours PreparedStatement. Il n'existe aucun problème.

    Tu dis toujours "ça marche pas" mais tu le prouves jamais. Et en l'occurrence tu risques pas de le prouver puisque ça marche parfaitement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  19. #19
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Points : 76
    Points
    76
    Par défaut
    si çà marche dans les requettes simples INSERT UPDATE
    Mais mois j'ai des Where not exists
    Mais je vais essayé le maximum parce que c'est professionnel et empeche d'avoire des erreurs

  20. #20
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ça marche partout. Aucune différence.

    Et je t'ai déjà dit de montrer pourquoi tu penses le contraire. Normalement un informaticien devrait faire ça sans que je lui demande. Ce n'est tout de même pas compliqué.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [ODBC] Fonction Replace en ODBC
    Par Alexandre T dans le forum Access
    Réponses: 4
    Dernier message: 10/01/2007, 11h02
  2. Fonction replace
    Par mpat dans le forum ASP
    Réponses: 2
    Dernier message: 30/08/2005, 09h59
  3. Fonction replace
    Par pmboutteau dans le forum ASP
    Réponses: 11
    Dernier message: 10/06/2005, 09h42
  4. PB avec la fonction replace
    Par Techman128 dans le forum C++
    Réponses: 6
    Dernier message: 24/02/2005, 11h39
  5. Fonction replace
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 10/06/2004, 12h18

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