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 :

probleme des apostrophes (') dans les requetes!


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Points : 12
    Points
    12
    Par défaut probleme des apostrophes (') dans les requetes!
    bonjour,

    J'ai un petit probleme quand je veux executer une requete avec des paramatres Java qui contiennentdes apostrophe " ' ".

    Exemple :
    message="select * from table2 where nom='"+valeurJava+'";";
    et ensuite la requete est executée par des methodes sql.inserer.
    si valeurJava="xxxxx'xxxxx";
    et la requete devient :

    select * from table2 where nom=' xxxxx'xxxxx';

    la requete ne passera pas car il y a des apostophes non fermees

    comment remedier a ce probleme?

  2. #2
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 234
    Points : 1 897
    Points
    1 897
    Par défaut
    Tu peux utiliser Hibernate pour ne plus avoir ce problème.

    Il y a aussi pour rester plus simple les PreparedStatement de java.

    A+

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Sans avoir à passer par hibernate, tu utilises les expressions régulieres sur tes variables à passer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    message="select * from table2 where nom='"+valeurJava.replace("'", "\'")+'";";
    Normalement ca devrait protéger les ' lors de l'insertion dans la base de données

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Pitié, utilisez plutôt un preparedStatement, ça règle tout ça (et d'autres choses)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PreparedStatement pstmt = connection.prepareStatement("update maTable set colString=? where idEnreg=?");
    psmt.setString(1, maChaine); // 1 => premier ? dans la requête
    pstmt.setInt(2, maCle); // 2 => deuxième ? etc...
    pstmt.executeUpdate();

  5. #5
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 234
    Points : 1 897
    Points
    1 897
    Par défaut
    Citation Envoyé par gbarbier
    Sans avoir à passer par hibernate, tu utilises les expressions régulieres sur tes variables à passer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    message="select * from table2 where nom='"+valeurJava.replace("'", "\'")+'";";
    Normalement ca devrait protéger les ' lors de l'insertion dans la base de données
    A non ce n'est pas une bonne solution.

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Autant pour moi ca doit être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    message="select * from table2 where nom='"+valeurJava.replace("'", "")+'";";
    Et encore ce code supprime les '. Donc les PreparedStatement restent la bonne solution.

  7. #7
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Citation Envoyé par gbarbier
    Autant pour moi ca doit être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    message="select * from table2 where nom='"+valeurJava.replace("'", "")+'";";
    Et encore ce code supprime les '. Donc les PreparedStatement restent la bonne solution.
    Oui, clairement !! Pourquoi essayer de bricoler quand on peut faire propre ??

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    J'ai essayer d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PreparedStatement pstmt = connection.prepareStatement("update maTable set colString=? where idEnreg=?");
    psmt.setString(1, maChaine); // 1 => premier ? dans la requête
    pstmt.setInt(2, maCle); // 2 => deuxième ? etc...
    pstmt.executeUpdate();
    mais il annonce une erreur: le pilote ne supporte pas .....


    c'est normal ca?

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Tu utilises quelle base et quel driver JDBC ?

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    salut,

    J'utilise une BD Oracle 10

    et pour le driver :Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

    a suivre...

  11. #11
    Membre averti Avatar de Rei Angelus
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2006
    Messages : 292
    Points : 356
    Points
    356
    Par défaut
    Citation Envoyé par gbarbier
    Sans avoir à passer par hibernate, tu utilises les expressions régulieres sur tes variables à passer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    message="select * from table2 where nom='"+valeurJava.replace("'", "\'")+'";";
    En fait pour du SQL, il me semble que ce serait plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    message="select * from table2 where nom='"+valeurJava.replace("'", "''")+'";";

  12. #12
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Tu as quel driver JDBC ?
    Moi j'utilise ojdbc14.jar avec une V10 d'oracle et ça fonctionne parfaitement.

    Quelle est (exactement) la requête que tu fais et la structure de la table concernée

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

    Citation Envoyé par le_style
    et pour le driver :Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Tu n'utilises pas un driver Oracle mais un driver ODBC sur JDBC... qui est loin d'être complet !


    Utilise un vrai driver JDBC pour Oracle : http://www.oracle.com/technology/sof...dbc/index.html

    a++

Discussions similaires

  1. Problème d'apostrophe dans les noms des tables
    Par anaranjado dans le forum Débuter
    Réponses: 2
    Dernier message: 11/03/2010, 18h16
  2. Probleme d'affichage dans les titres des fenetres
    Par pierrot10 dans le forum Windows XP
    Réponses: 4
    Dernier message: 24/01/2008, 09h01
  3. Réponses: 5
    Dernier message: 12/01/2007, 11h39
  4. problemes de performances avec les requetes select
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/07/2003, 13h39

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