Propriété de Albiri Sigue
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
222 L’art du développement Android
récupérer n’est pas connu au moment de la compilation, par exemple, concaténer les noms
des colonnes pour former une liste délimitée par des virgules peut être ennuyeux – c’est là
que query() entre en jeu.
Requêtes normales
La méthode query() prend en paramètre les parties d’une instruction SELECT afin de
construire la requête. Ces différentes composantes apparaissent dans l’ordre suivant dans
la liste des paramètres :
1. Le nom de la table interrogée.
2. La liste des colonnes à récupérer.
3. La clause WHERE, qui peut contenir des paramètres positionnels.
4. La liste des valeurs à substituer à ces paramètres positionnels.
5. Une éventuelle clause GROUP BY.
6. Une éventuelle clause ORDER BY.
7. Une éventuelle clause HAVING.
À part le nom de la table, ces paramètres peuvent valoir null lorsqu’ils ne sont pas
nécessaires :
String[] colonnes={"ID", "inventory"};
String[] params={"snicklefritz"};
Cursor result=db.query("widgets", colonnes, "name=?",
params, null, null, null);
Utilisation des "builders"
Une autre possibilité consiste à utiliser SQLiteQueryBuilder, qui offre bien plus de possibilités pour construire les requêtes complexes, notamment celles qui impliquent d’unir les
résultats de plusieurs sous-requêtes, par exemple. En outre, l’interface SQLiteQueryBuilder
s’accorde parfaitement avec l’interface ContentProvider pour exécuter les requêtes.
Un patron de conception classique pour l’implémentation de la méthode query() de votre
fournisseur de contenu consiste donc à créer un objet SQLiteQueryBuilder, à lui fournir
certaines valeurs par défaut, puis à lui faire construire (et, éventuellement, exécuter) la
requête complète en combinant ces valeurs par défaut avec celles qui ont été passées au
fournisseur de contenu lors de la demande de requête.
Voici, par exemple, un extrait de code d’un fournisseur de contenu utilisant SQLiteQueryBuilder :
@Override
public Cursor query(Uri url, String[] projection, String selection,
String[] selectionArgs, String sort) {
Livre Android.book Page 222 Dimanche, 8. novembre 2009 12:23 12
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
222 L’art du développement Android
récupérer n’est pas connu au moment de la compilation, par exemple, concaténer les noms
des colonnes pour former une liste délimitée par des virgules peut être ennuyeux – c’est là
que query() entre en jeu.
Requêtes normales
La méthode query() prend en paramètre les parties d’une instruction SELECT afin de
construire la requête. Ces différentes composantes apparaissent dans l’ordre suivant dans
la liste des paramètres :
1. Le nom de la table interrogée.
2. La liste des colonnes à récupérer.
3. La clause WHERE, qui peut contenir des paramètres positionnels.
4. La liste des valeurs à substituer à ces paramètres positionnels.
5. Une éventuelle clause GROUP BY.
6. Une éventuelle clause ORDER BY.
7. Une éventuelle clause HAVING.
À part le nom de la table, ces paramètres peuvent valoir null lorsqu’ils ne sont pas
nécessaires :
String[] colonnes={"ID", "inventory"};
String[] params={"snicklefritz"};
Cursor result=db.query("widgets", colonnes, "name=?",
params, null, null, null);
Utilisation des "builders"
Une autre possibilité consiste à utiliser SQLiteQueryBuilder, qui offre bien plus de possibilités pour construire les requêtes complexes, notamment celles qui impliquent d’unir les
résultats de plusieurs sous-requêtes, par exemple. En outre, l’interface SQLiteQueryBuilder
s’accorde parfaitement avec l’interface ContentProvider pour exécuter les requêtes.
Un patron de conception classique pour l’implémentation de la méthode query() de votre
fournisseur de contenu consiste donc à créer un objet SQLiteQueryBuilder, à lui fournir
certaines valeurs par défaut, puis à lui faire construire (et, éventuellement, exécuter) la
requête complète en combinant ces valeurs par défaut avec celles qui ont été passées au
fournisseur de contenu lors de la demande de requête.
Voici, par exemple, un extrait de code d’un fournisseur de contenu utilisant SQLiteQueryBuilder :
@Override
public Cursor query(Uri url, String[] projection, String selection,
String[] selectionArgs, String sort) {
Livre Android.book Page 222 Dimanche, 8. novembre 2009 12:23 12
