2009-06-17 7 views
1

Comment filtrer les guillemets simples dans java?Filer/Remplacer un guillemet simple dans Java

J'ai un champ de recherche où si quelqu'un tape une seule citation, j'obtiens une erreur de base de données. Je ne veux pas le mettre en JavaScript ou au niveau de la base de données; Je veux le faire en Java seulement. Comment puis je faire ça?

Je ne veux pas le perdre complètement. Est-ce qu'il y a un autre moyen? Va remplacer la citation par \ 'travail ??

Répondre

6

Je pense que vous approchez le problème du mauvais angle. Je soupçonne fortement que vous construisez votre SQL comme ceci:

String sql = "SELECT * FROM TABLE WHERE USERID='" + userInput + "'"; 

ou quelque chose de similaire. Ne fais pas ça. Utilisez plutôt une requête paramétrée et indiquez l'entrée de l'utilisateur en tant que paramètre. Chaque base de données que j'ai jamais utilisée sait comment gérer cela, et c'est la manière sûre de gérer les entrées utilisateur.

Si vous vraiment, vraiment voulez juste pour se débarrasser des citations, vous pouvez utiliser:

text = text.replace("'", ""); 

... mais s'il vous plaît ne pas. Utilisez une requête paramétrée à la place.

+0

je ne peux pas faire que j'utilise en veille prolongée, donc je veux faire un filtrage en java itsel ANDNOT au niveau db – user93796

+0

je ne veux pas le perdre complètement, est-il une autre façon. wil remplacer la citation par \ 'wil travail ?? – user93796

+1

Si vous utilisez Hibernate, vous ne devriez pas avoir besoin de faire cela. Il utilise lui-même les instructions préparées, précisément pour éviter les injections SQL (et améliorer les performances). Veuillez éditer votre question pour donner un exemple de la façon dont vous essayez d'exécuter la requête, et nous devrions pouvoir vous aider. –

4

Oui, utiliser PreparedStatement.setString():

String sql = "SELECT * FROM table WHERE USERID = ?"; 
PreparedStatement pstmt = connection.prepareStatement(sql); 
pstmt.setString(1, "O'Connor"); 
ResultSet rs = pstmt.executeQuery(); 

règles Échapper pour les bases de données diffèrent. Par exemple, dans Oracle, vous pouvez dupliquer l'apostrope pour le faire échapper. En MySQL c'est backslash + apostrophe (je pense).

Donc, soit userInput = userInput.replaceAll("'", "''"); ou userInput = userInput.replaceAll("'", "\\'");

Questions connexes