Instruction SQL select avec la clause where
comment pourrais-je écrire cette instruction sql sans valeur codée en dur?
resultSet = statement
.executeQuery("select * from myDatabase.myTable where name = 'john'");
//this works
plutôt quelque chose comme:
String name = "john";
resultSet = statement
.executeQuery("select * from myDatabase.myTable where name =" + name);
//Unknown column 'john' in 'where clause' at
//sun.reflect.NativeConstructorAccessorImpl.newInstance0...etc...
merci d'avance..
Utiliser les requêtes préparées
L'une des raisons pour lesquelles les gens vous disent d'utiliser les requêtes préparées, c'est parce que ce que vous essayez de faire dans votre deuxième exemple est vulnérable à un Attaque par Injection Sql.
peut-être vous devriez ouvrir eclipse et de l'essayer... alors vous verrez que vous avez tort..
L'une des raisons pour lesquelles les gens vous disent d'utiliser les requêtes préparées, c'est parce que ce que vous essayez de faire dans votre deuxième exemple est vulnérable à un Attaque par Injection Sql.
peut-être vous devriez ouvrir eclipse et de l'essayer... alors vous verrez que vous avez tort..
OriginalL'auteur BigBug | 2013-01-28
Vous devez vous connecter pour publier un commentaire.
Il est généralement une très mauvaise idée de construire des requêtes SQL, la façon dont vous devez le faire, car il ouvre la porte à toutes sortes d'attaques par injection SQL. Pour ce faire correctement, vous allez avoir à utiliser Les Requêtes Préparées à la place. Cela permettra également de résoudre toutes sortes d'échapper à des questions que vous êtes de toute évidence en ce moment.
Noter que
prepareStatement()
est un appel coûteuse (à moins que votre serveur d'applications utilise l'instruction de la mise en cache et d'autres installations similaires). Théoriquement, il serait mieux si vous préparez la déclaration une fois, puis de les réutiliser plusieurs fois (si pas simultanément):Fait. Je vous remercie.
+1... la première personne à qui parler de l'évidente Attaque par Injection Sql...
merci, c'était une bonne réponse..
OriginalL'auteur Isaac
Il vous manque les guillemets simples autour de votre chaîne, votre code corrigé:
Imprimer /log texte de la requête avant d'exécuter la requête pour voir si ça a l'air OK.
Si vous allez faire beaucoup de requêtes semblables où seulement les changements constants, pensez à utiliser les requêtes préparées
êtes-vous sûr que vous avez réussi à copier le code de la réponse correctement? Cela devrait vraiment être OK.
OriginalL'auteur piokuc
cela devrait fonctionner:
OriginalL'auteur
vous avez besoin de mettre des guillemets autour de la valeur ('jean' à la place de jean)...
je ne sais pas pourquoi cela a été downvoted, c'est correct.
que voulez-vous dire, ne fonctionne pas?
C'est correct selon moi. Ce que la réponse dit....est : Changement String nom = "jean"; String nom = "'john'"; c'est tout(ajouter des guillemets à l'intérieur de la Chaîne de citations...comme la réponse dit!)
caractère non valide erreur constante
OriginalL'auteur Zdravko Danev
Essayez ce qui suit :
OriginalL'auteur c.pramod
Mettre des guillemets autour de vos
name
de valeur, car c'est une chaîne.OriginalL'auteur Matt K