2011-06-16 3 views
0

Chaque fois que la requête de recherche contient les CHAR mes plantages d'applications Android, car il pense que le "divise la chaîne. Voici un exemple -problème CHAR dans SQLite - Android

Cursor selCur= myDataBase.rawQuery("SELECT * FROM drinks WHERE name like '%"+editTextSearch.getText().toString()+"%'", null); 

Chaque fois que editTextSearch.getText().toString() contient un '(par exemple - "Ben"), les accidents de l'application.

Je ne peux pas penser à toute façon autour d'elle. Pourrait vraiment utiliser l'aide.

Merci!

Répondre

4

Ce que vous devez vraiment faire est d'utiliser la méthode SQLiteDatabaserawQuery avec un tableau de chaînes pour la sélection args:

Cursor selCur= myDataBase.rawQuery("SELECT * FROM drinks WHERE name like ?", new String[] {"%" + editTextSearch.getText().toString() + "%"});

Vous placez un point d'interrogation ? à la place de la chaîne que vous souhaitez avoir là-bas, et mettre la chaîne réelle dans un tableau, comme je l'ai ci-dessus. Vous pouvez avoir plusieurs ? dans votre chaîne de requête, assurez-vous simplement que la taille de votre tableau correspond au nombre de ? que vous avez. Editer: aussi pour utiliser like, vous pouvez ajouter le symbole % dans le tableau String comme je viens de le changer. J'ai trouvé que cela résulte en une requête que j'attends plutôt que d'inclure le % dans la chaîne de requête elle-même.

0

échapper le «caractère, pas sûr si cela est la syntaxe correcte mais quelque chose comme cela devrait fonctionner:

Cursor selCur= myDataBase.rawQuery("SELECT * FROM drinks WHERE name like '%"+editTextSearch.getText().toString().replace("'", "''")+"%'", null); 

Prenez garde de l'injection sql par la voie. vous devez valider le champ editTextSearch pour l'injection sql.

0

Vous devriez l'utiliser de cette façon:

chaîne args [] = new String [] {. EditTextSearch.getText() toString()};

curseur selCur = myDataBase.rawQuery ("SELECT * FROM boissons WHERE nom comme '%%?", Args);