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 :

Stocker une expression reguliere dans une base MySQL


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 96
    Points
    96
    Par défaut Stocker une expression reguliere dans une base MySQL
    Bonjour,

    J'essaie avec la JDBC de stocker des donnees, dont des expressions regulieres, dans une base MySQL avec une commande INSERT...

    Or, je constate que la donnee
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    '"\s*onmouseout="restoreChannels\(\);"\s+onmouseover="(clear|get)Channels\(\'*[0-9]*\'*\);*\"'
    est stockee de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "s*onmouseout="restoreChannels();"s+onmouseover="(clear|get)Channels('*[0-9]*'*);*"
    Vous voyez la perte d'information due à cette interprétation de la donnée de type VARCHAR ?
    J'ai essaye de stocker mon exp reg dans un blob, mais ça n'empêche pas MySQL de modifier ma chaîne !!!

    Vous avez une idee... autre que de coder mes antislash de maniere doublee pour qu'ils soient interpretes comme je veux ? (\\ pour que ce soit stocke \).

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 76
    Points : 27
    Points
    27
    Par défaut
    normalement on utilise les \ pour qu'un caractère spécial soit lu comme un simple caractère.
    si j'ai bien compris, toi tu veux que ton expression contienne des \ compris comme \ pas pour interpréter un autre caractère spécial !!

  3. #3
    Membre régulier
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 96
    Points
    96
    Par défaut
    Effectivement fangriz, expliqué comme ça, le problème donne mal à la tête !

    Mais tu as raison, reprenons:

    La chaîne de caractères est destinée à servir comme expression règulière.

    Donc, il est vital que certaines parenthèses, par exemple, soient :
    - tantôt interprétées en tant que telles par le moteur RegExp qui va y voir des groupes afin de faire du backreference etc.
    - tantôt non interprétées et considérées comme des caractères simples

    Le problème c'est que durant l'envoi des données à MySQL via Java, les antislashes disparaissent....car elles sont interprétées dans Java.

    Pourtant, en faisant une impression de débogage dans la console, je constate que la donnée envoyée est :
    INSERT INTO MaBase VALUES (..., '"\s*onmouseout="restoreChannels\(\);"\s+onmouseover="(clear|get)Channels\(\'*[0-9]*\'*\);*\"', ...);

    Ce qui veut dire que lorsque MySQL la reçoit, il interprète les antislashes.
    Ma question est : est-ce qu'il y a un datatype (VARCHAR et BLOB non semble-t-il) qui prend la string telle quelle sans interpréter ?

  4. #4
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    As tu essayé de faire ton insert en passant par un PrepareStatement ?
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  5. #5
    Membre régulier
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 96
    Points
    96
    Par défaut
    Merci à toi IN,


    En cherchant des infos sur les PreparedStatement, j'ai trouvé la soluce
    à mon problème.

    En particulier, sur la page (http://developer.mimer.com/howto/howto_32.htm),
    j'ai lu ça :
    "With a PreparedStatement, you don’t have to bother with string concatenation. Neither do you have to bother with SQL escape characters or quotes in the name that would invalidate the SQL-statement."

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  2. Réponses: 1
    Dernier message: 04/06/2008, 07h57
  3. ( dans une expression reguliere
    Par goldor dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/04/2008, 19h48
  4. Une date butoire dans une expression régulière
    Par zooffy dans le forum ASP.NET
    Réponses: 4
    Dernier message: 14/02/2008, 10h11
  5. [RegEx] Utiliser une expression régulière dans une requête
    Par Tobleron dans le forum Langage
    Réponses: 2
    Dernier message: 18/02/2007, 19h00

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