[JAVA/Postgresql] Caractère d'échappement

Caractère d'échappement [JAVA/Postgresql] - SQL/NoSQL - Programmation

Marsh Posté le 13-06-2006 à 16:35:26    

Salut,
 
Mon problème est assez simple !
Je fais une requète du genre :
 

Code :
  1. StringBuffer blabla = new StringBuffer();
  2. blabla.append("from table " );
  3.  .append("where type='" ).append(type)
  4.  .append("' and designation ='" ).append(designation)
  5.  .append("' and action='" ).append(action).append("'" );


 
Sauf que ma variable designation est une chaine de caractère du genre : "L'histoire c'est cool"
Et comme vous le constaté, désignation contient des apostrophes '
ça nous donnerai la requète sql :

Code :
  1. where type='toto' and designation='L'histoire c'est cool' and action='titi'


Evidement lors de l'exécution de la requète ça plante a ce niveau la :

Code :
  1. designation='L'histoire c'est cool


 
Quelqu'un a une idée ?


Message édité par boumchakal le 13-06-2006 à 16:36:36
Reply

Marsh Posté le 13-06-2006 à 16:35:26   

Reply

Marsh Posté le 13-06-2006 à 16:38:44    

J'ai testé des trucs du genre :
 

Code :
  1. designation=designation.replace("'","\\'" );


 

Code :
  1. designation=designation.replace("'","'''" );


 
sans succès :(

Reply

Marsh Posté le 13-06-2006 à 16:42:12    

=> utiliser des prepared statements qui feront tous les échappement pour toi et qui t'éviterons des gros ennuis (genre sql injection etc etc)

Reply

Marsh Posté le 13-06-2006 à 16:52:14    

souk a écrit :

=> utiliser des prepared statements qui feront tous les échappement pour toi et qui t'éviterons des gros ennuis (genre sql injection etc etc)


 
Je ne connais pas les Prepared Statements ... pouvez-vous m'en dire un peu plus ? Histoire d'avoir une piste pour chercher ?

Reply

Marsh Posté le 13-06-2006 à 16:59:14    

google => java preparedStatement site:java.sun.com => ton bonheur

Reply

Marsh Posté le 14-06-2006 à 14:18:35    

Code :
  1. designation=designation.replace("'","''" );

Reply

Marsh Posté le 14-06-2006 à 15:16:10    

nemohp a écrit :

Code :
  1. designation=designation.replace("'","''" );



 
une bonne idée ca, maintenant y a plus qu'à escaper tous les autres caracteres a la mimine, les " et compagnie ... [:pingouino]

Reply

Marsh Posté le 14-06-2006 à 15:41:44    

vi souk a raison, l'utilisation des PreparedStatements est casiement impératif pour un code propre et élégant :)
 
Par contre j'utilise Spring & Hibernate ... alors ce code ci dessous ne m'arrange pas scpécialement :

Code :
  1. String url = "jdbc:mysql://localhost/dbessai";
  2.     Connection conn =
  3.         DriverManager.getConnection(url, "user", "password" );
  4. PreparedStatement st = conn.prepareStatement(
  5.     "UPDATE personne SET Age = ? " +
  6.     "WHERE Nom = ? "
  7.     );

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed