-1
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER " + " = '1''"; 
String[] selectionArgs = String.valueOf(1); 

Pourquoi mettons-nous " = '1' " dans la requête Selecion?Signification et but de "= '1" "dans ContentResolver Query

et aussi la raison pour String.valueOf(1);

+0

Cela ne ressemble pas à du code Java valide. Ajoutez également plus de contexte à nos extraits de code. 'selection' et' selectionArgs' ne semblent pas appartenir ensemble. – Marten

Répondre

1

Vous avez probablement voulu dire ceci:

String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = ?"; 
String[] selectionArgs = new String[]{String.valueOf(1)}; 

ou cette

String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = ?"; 
String[] selectionArgs = new String[]{"1"}; 

ou cette

String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = '1'"; 
String[] selectionArgs = null; 

ou tout simplement ce

String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1"; 
String[] selectionArgs = null; 

Les quatre sélections ont les mêmes résultats: Les contacts qui ont un numéro de téléphone.

SQLite (le type de base de données qui est utilisé sur Android) ne supporte pas les booléens (voir Datatypes in SQLite Version 3), true et false sont généralement stockés sous forme d'entiers 1 et 0. Donc, pour vérifier si un champ booléen est vrai, vous vérifiez s'il a la valeur 1.

Les extraits de code # 1 et # 2 utilisent un prepared statement qui contient un paramètre ou un espace réservé remplacé par la première valeur du tableau selectionArgs (puisqu'il s'agit du premier paramètre de la requête). C'est une technique de protection contre l'injection SQL qui rend souvent vos requêtes plus lisibles. selectionArgs doit être un tableau de String valeurs, de sorte que la valeur entière 1 dans le snippet # 1 doit être convertie en String d'abord (en utilisant String.valueOf(int) n'a de sens que si vous transmettez une variable plutôt qu'un nombre constant). Si vous n'utilisez aucune variable dans votre instruction select, vous pouvez simplement insérer toutes les valeurs dans l'instruction n'utilisant pas d'espace réservé et selectionArgs comme dans les extraits de code # 3 et # 4. Comme SQLite est typé dynamiquement, peu importe si vous vérifiez l'égalité à 1 ou '1', l'interpréteur SQL l'obtiendra dans les deux cas.

+0

C'était une question muette que je viens de poster sans étudier les détails de la méthode query(). Merci pour votre réponse. –