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

avec Java Discussion :

SQL Derby Quotes


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 48
    Points : 29
    Points
    29
    Par défaut SQL Derby Quotes
    Bonjour à tous,

    Mon problème est simple, je ne sais pas comment faire pour éviter les problèmes de quotes dans mes requetes SQL.
    J'utilise une base embarquée Derby et là j'ai besoin d'effectuer une requête d'ajout dans la base mais ce que je veux ajouter contient des quotes.

    Je sais que par exemple en MySQL on rajoute des antislash, mais pour une base Derby je ne sais pas comment on fait...

    Quelqu'un aurait une idée?

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Avec JDBC, le mieux, dans la majorité des cas, est de passer par un PreparedStatement et non un Statement.
    Tu n'auras plus de problème avec les quotes ou les dates et tu ne risqueras plus l'injection SQL.
    Ça ce ferait comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    PreparedStatement pstmt = connection.prepareStatement("insert into MaTable(colInteger1, colString2, colDate3) values(?, ?, ?)");
    pstmt.setInt(1, unParametreInteger);
    pstmt.setString(2, unParametreString);
    pstmt.setDate(3, unParametreDate);
    pstmt.executeUpdate();
    ...
    Dans le cas d'une Date, JDBC attend une java.sql.Date.
    Si ton programme manipule des java.util.Date, la conversion se fera comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    pstmt.setDate(3, new java.sql.Date(unParametreJavaUtilDate.getTime()));
    ...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 48
    Points : 29
    Points
    29
    Par défaut
    OK merci mais en fait mon problème était que j'avais ma requête déjà faite à la main, ce n'était pas un problème de traitement en Java.
    Je voulais l'executé directement dans NetBeans.

    Mais en fait j'ai trouvé la solution : il faut mettre deux quotes au lieu d'une :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM maTable WHERE Nom = 'Nom d''un client';
    Et surtout il faut que la requête soit sur une ligne.

    Mais merci pour ton conseil je vais essayer de l'utiliser pour remplacer ce que j'avais déjà fait.

    Mais je n'ai pas compris : values(?, ?, ?)

    Il faut toujours mettre des ? et ensuite mettre
    pstmt.setInt(1, unParametreInteger);
    ou alors les ? ne sont que des exemples et on peut mettre autre chose?

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Les ? représente la position d'un paramètre.
    Ensuite, on utilise le "setter" approprié au type de la colonne en précisant l'indice du paramètre (en partant de 1).
    Ainsi, dans la chaîne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    
    insert into MaTable(colInteger1, colString2, colDate3) values(?, ?, ?)
    L'indice 1 représente le premier '?' (donc la valeur affectée à colInteger1) etc...
    Comme tu peux le voir, pour un champ String, le ? n'est pas entre quotes, le setter se chargera de doubler les quotes dans la valeur du paramètre...

    Sinon, pour ton problème lié au Statement, tu n'as pas d'autre choix que de doubler les quotes (dans le texte).
    Si tu voulais affecter la valeur "J'ai bien compris l'avantage du PreparedStatement" dans la chaîne de requête, il faudrait construire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "update MaTable set colString='J''ai bien compris l''avantage du PreparedStatement' where id=1"
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Requette Sql et quotes
    Par sami117 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/02/2009, 23h59
  2. [SQL] Simples quotes échappés automatiquement ?
    Par elspliffo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/05/2007, 22h26
  3. [SQL] magic quotes ou double apostrophes pour échapper apostrophe
    Par zorian dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 13/03/2006, 16h23
  4. [SQL][DERBY] Que signifie cette erreur ?
    Par irenee dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/12/2005, 14h34
  5. sql dynamic : passage de parametre entre quotes
    Par de LANFRANCHI dans le forum SQL
    Réponses: 12
    Dernier message: 26/05/2004, 15h09

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