Je suis encore un peu nouveau sur Java et j'essaie d'insérer des données dans une base de données. Je reçois une erreur lors de l'insertion d'une chaîne contenant des s si mon résultat final serait d'échapper à l'apostrophe. Comment puis-je accomplir?Echapper à une apostrophe en Java
Répondre
En utilisant StringEscapeUtils:
StringEscapeUtils.escapeSql(yourstring);
Attention: Comme des communes Lang 3.0:
StringEscapeUtils.escapeSql
Cette méthode était trompeuse, ne traitant que les cas SQL les plus simples possibles. Comme SQL n'est pas l'accent de Lang, cela n'a pas de sens de maintenir cette méthode.
C'est exactement ce que je cherchais. – jkushner
Même si je suis d'accord que l'utilisation de escapeSql peut avoir des négatifs, il y a des endroits où les instructions préparées ne fonctionnent pas bien. Par exemple, créer une insertion de plusieurs lignes. Cela étant dit, certains pilotes db vous permettront de combiner plusieurs instructions préparées dans un lot, puis de les convertir automatiquement en une seule instruction plus efficace. Savoir lequel utiliser quand peut prendre quelques recherches. – RHSeeger
Cela dépend de la base de données que vous utilisez. Habituellement '' fonctionne (je n'ai que des connaissances de première main avec SQL Server).
Quelle base de données utilisez-vous?
J'utilise MySQL – jkushner
Dépend de la base de données, mais vous pouvez utiliser '' dans SqlServer.
EDIT: En MySql vous pouvez utiliser un double ou un antislash apostrophe: http://www.faqts.com/knowledge_base/view.phtml/aid/630
double apostrophe dans postgres –
Et je suis d'accord avec James dans le commentaire: utiliser des déclarations préparées. Meilleure solution à long terme. –
Utilisez préparé des déclarations. En plus de gérer tous les caractères spéciaux, ils sont beaucoup plus robustes et aident à prévenir les attaques par injection SQL.
+1 Cette réponse va au cœur du problème: le codage manuel de votre propre SQL dans vos appels de méthode est une mauvaise pratique, et vous ouvre à de nombreux problèmes de sécurité. – rtperson
Une bonne habitude à prendre, mais peut-être trop pour apprendre la langue. –
... il suffit de demander à Little Bobby Tables. :) – rtperson
Le problème n'est pas vraiment avec Java, mais plutôt avec la base de données sous-jacente. Très probablement, vous enchaînez vos paramètres ensemble comme ceci:
String sql = "select * from sometable where somefield = " + someObject.getSomeField();
Ne faites pas cela. Utilisez PreparedStatement à la place.
Cela a l'avantage supplémentaire de prévenir les attaques par injection SQL, s'il s'agit d'une application qui doit être concernée par de telles choses.
+1: non seulement elle vous évite les attaques par injection SQL, mais elle facilite également la définition d'objets Java dans une instruction SQL (Date, InputStream, etc.) et est techniquement aussi plus performant (précompilé chez DB). – BalusC
Je suppose que vous utilisez un java.sql.Statement et appelez la méthode executeQuery avec une chaîne. C'est mauvais, car il est possible de faire une injection SQL. Vous devez utiliser un java.sql.PreparedStatement à la place, puis vous pouvez définir n'importe quelle chaîne que vous voulez en tant que paramètre et vous n'aurez pas votre problème.
Par exemple:
PreparedStatement pstmt = con.prepareStatement("UPDATE MY_TABLE SET TEXT_FIELD = ?");
pstmt.setString(1, "any String 'will work here!");
- 1. Quand une Apostrophe n'est pas une Apostrophe - validation .Net/Javascript
- 2. Echapper à '?' dans mod_rewrite
- 3. Echapper à C#, peu déconcerté
- 4. Echapper à HTML dans Rails
- 5. Echapper à une boucle infinie sans quitter le navigateur
- 6. Python: Echapper des chaînes pour une utilisation en XML
- 7. Échapper à une apostrophe d'un XML de liaison de données
- 8. Echapper à des caractères génériques MySQL
- 9. PHP - supprimer une barre oblique inverse à partir d'une apostrophe
- 10. Echapper un caractère carré en XML
- 11. Echapper des doubles traits d'union en Javascript?
- 12. Echapper des caractères spéciaux
- 13. Echapper à un caractère dans l'équation TeX?
- 14. Echapper des caractères spéciaux
- 15. Echapper élégamment aux erreurs
- 16. Ajouter une apostrophe/guillemet simple à mon match RegEx
- 17. Comment peut-on échapper à une apostrophe dans db2 sql
- 18. Echapper à des guillemets simples javascript
- 19. Echapper guillemet dans String.Format()
- 20. erreur javascript apostrophe
- 21. problème apostrophe avec ajax post à php
- 22. Problème avec Apostrophe
- 23. APOSTROPHE DYNAMIC SQL
- 24. apostrophe dans mysql/php
- 25. Recherche d'enregistrements avec apostrophe
- 26. Informix apostrophe Erreur SQL
- 27. Echapper aux chaînes sed correctement
- 28. nom majuscule avec php apostrophe
- 29. Ruby: Echapper des caractères spéciaux dans une chaîne
- 30. ASP.NET - Comment échapper une apostrophe avec une barre oblique à insérer dans une base de données
« Le point crucial du biscuit est lapostrophe » - FZ –