Índice
Los proveedores de conteido ofrecen dos formas de pasar una cláusula where:
- A través de la URI
- Combinando una cadena y un conjunto de argumentos string-array reemplazables.
En esta entrada vamos a ver ambas.
Cláusula Where mediante la URI
Imaginemos que queremos recuperar un lugar (De la aplicación FavSites) cuyo id sea 23. Usaríamos el siguiente código:
Activity activity;
//... Inicializamos la actividad...
String siteUri = "content://com.elbauldelprogramador.provider.FavSites/sites/23";
Cursor managedCursor = activity.managedQuery( siteUri,
projection, //Columnas a devolver
null, //Cláusula WHERE
null); //Cláusula ORDER BY
En este ejemplo se ha dejado el argumento que hace referencia a la cláusula where a null ya que hemos especificado el ID del registro que queremos en la URI. En este caso el ID está embebido en la URI. Se usa la URI como vehículo para pasar la cláusula where. Esto se hace evidente cuando nos fijamos cómo se implementa el proveedor para los Sites de la aplicación, que corresponde al método query. A continuación un fragmento de código del método query:
//Devuelve un id de sitio
//content://.../sites/23
int siteId = uri.getPathSegments().get(1);
queryBuilder.setTables(favSitesTableMetaData.TABLE_NAME);
queryBuilder.appendWhere(favSitesTableMEtaData._ID + "=" + siteId);
Como vemos la id del sitio se extrae de la URI. La Uri se divide en segmentos (path) del a forma content://. . . /seg1/seg2/seg3
, en nuestro ejemplo el primer segmento es el id 23.
Las clases Uri y UriMatcher se usan para identificar las URIs y extraer parámetros de ellas, más adelante las veremos. SQLiteQueryBuilder es una clase asistente en android.database.sqlite que permite construir consultas SQL que se ejecutarán por SQLiteDatabase en una instancia de una base de datos SQLite.
Cláusulas where explícitas
Vamos a ver una vez más la estructura del método managedQuery de la clase Activity:
public final Cursor managedQuery(Uri uri,
String[] projection,
String selection,
String[] selectionArgs,
String sortOrder)
El parámetro selection, es el que actúa como cláusula Where (Representa un filtro en el que elegimos qué filas queremos que se nos devuelvan). Si en este argumento pasamos null se nos devolverán todas las filas para la URI dada. En este parámetro podemos incluir ?, que serán reemplazados por los valores del parámetro selectionArgs en el orden que vayan apareciendo.
Los siguientes códigos que se muestran son equivalentes:
//Método Uri
managedQuery("content://com.elbauldelprogramador.provider.FavSites/sites/23"
,null
,null
,null
,null);
//Método explícito
managedQuery("content://com.elbauldelprogramador.provider.FavSites/sites"
,null
,"_ID=?"
,new String[] {23}
,null);
Te preguntarás qué método usar en según que situación. Por convención se suele usar el método mediate URI cuando sea posible aplicarlo, y el explícito en casos especiales (Como en el ejemplo de arriba.)
Siguiente Tema: Insertando registros
¿Has visto algún error?: Por favor, ayúdame a corregirlo contactando conmigo o comentando abajo.