44 votes

Citations Android dans une chaîne de requête SQL

Je veux effectuer une requête comme suit:

 uvalue = EditText( some user value );
p_query = "select * from mytable where name_field = '" +  uvalue + "'" ;
mDb.rawQuery( p_query, null );
 

si l'utilisateur entre un seul devis dans leur entrée, il se bloque. Si vous le changez en:

 p_query = "select * from mytable where name_field = \"" +  uvalue + "\"" ;
 

il se bloque si l'utilisateur entre un guillemet double dans leur entrée. et bien sûr, ils peuvent toujours entrer des guillemets simples et doubles.

129voto

Josef Pfleger Points 37003

Vous devriez utiliser le paramètre rawQuery méthode selectionArgs :

 p_query = "select * from mytable where name_field = ?";
mDb.rawQuery(p_query, new String[] { uvalue });
 

Cela résout non seulement votre problème de devis, mais atténue également SQL Injection .

14voto

Nikhil Points 121

DatabaseUtils.sqlEscapeString a bien fonctionné pour moi. La chaîne est entourée de guillemets simples et les guillemets simples à l'intérieur de la chaîne deviennent des guillemets doubles. J'ai essayé d'utiliser selectionArgs dans la méthode getContentResolver (). Query (), mais cela n'a pas fonctionné du tout.

2voto

gssi Points 1501

Avez-vous essayé de remplacer une citation simple par 2 citations simples? Cela fonctionne pour la saisie de données dans une base de données.

1voto

Amt87 Points 872

Je préfère éviter les guillemets simples et les guillemets doubles dans chaque instruction d'insertion avec Sqlite comme ceci:

  String sqlite_stament = sqlite_stament.replace("'", "''").replace("\"", "\"\"");
 

0voto

Nency Points 298

J'ai le même problème mais maintenant il est résolu en écrivant simplement le code comme dans votre cas, vous voulez insérer la valeur uvalue .Ensuite, écrivez en tant que

 uvalue= EditText( some user value );
uvalue = uvalue.replaceAll("'", "''");
p_query = "select * from mytable where name_field = '" +  uvalue + "'" ;
mDb.rawQuery( p_query, null );
 

cool..!!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X