Filtrar entradas en las funciones personalizadas de ContentProvider
En un ContentProvider
personalizado necesito filtrar algunas columnas especificadas en las entradas. Dado el texto orientado a las interfaces de Android esto me está dando un tiempo difícil.
Por ejemplo, la entrada en MyContentProvider.query()
efectivamente pedirá algo como:
- Problema con la base de datos SQL en la aplicación PhoneGap que se ejecuta en el iPhone
- Consulta los últimos mensajes SMS por contacto
- ¿Cómo comprobar si el valor ya existe en la base de datos android sqlite?
- SQLite Random () En ORDER BY no se está clasificando correctamente
- Cómo escribir contiene consulta en SQLite fts3 fulltext search
SELECT column_a, column_b FROM my_table WHERE column_a=1 AND column_b=red;
El problema es que en este particular MyContentProvider
MyContentProvider no podría tener ningún sentido y no estaría presente en la tabla. Filtrar la proyección para que sólo permanezcan las columnas relevantes se puede hacer fácilmente ya que es una cadena []. Sin embargo, filtrar las entradas String " where
" (selección) y " selectionArgs
" para estas columnas no es trivial. Si se hace correctamente se convertiría en:
SELECT column_a FROM my_table WHERE column_a=1;
De lo contrario se obtendría un SQLiteException "no such column"
.
Por lo tanto, ¿hay alguna manera fácil de ignorar o filtrar las columnas de una declaración sql o tengo que ir y escribir algunos inteligentes aunque muy limitado regexp análisis de código para la parte de selección?
La razón por la que no estoy recibiendo las entradas correctas es porque mantengo un ContentProvider
personalizado como una interfaz a la dirección, pero hablo con varios ContentProvider
personalizados aquí (en segundo plano). De una forma u otra, tendría que filtrar la selección en alguna parte.
Tenga en cuenta que no estoy preguntando simplemente cómo hacer una consulta o utilizar la SELECT ... WHERE
. Sin embargo, se refiere a mi implementación de la función query()
.
- Comprobación del resultado de rawQuery de Android
- ¿Cómo crear una vista sql (CREATE VIEW) en sqlite (android) y consulta?
- DBFlow seleccionar donde COLUMN en la lista?
- Shell de salida Android de sqlite
- Utilización de la base de datos legible y escrita de SQLite
- SQLite de Android - ¿por qué mi DB se vuelve a crear cada vez?
- android sqlite crea índice con la cláusula where falla
- Uso de una biblioteca / marco de compilador de consultas SQL con Android
Ya que está extendiendo su MyContentProvider
con ContentProvider
¿por qué no sólo sobrecargar el método query()
?
Mira ContentProvider – Compartir contenido utilizando el ContentProvider para alguien elses ejemplo sobre cómo crear un ContentProvider personalizado. Debe tener control total sobre los datos que SQLiteDatabase
.
Lo que es más importante, mira los argumentos proporcionados a query()
, ya que contienen la información que necesitas para que puedas construir dinámicamente la consulta a partir de lo que se pasa a la llamada al método.
Dependiendo de si puede encontrar un buen constructor de consultas, tendrá la oportunidad de crear una pequeña pero poderosa capa de abstracción para generar sus consultas, de modo que se minimice la cantidad de SQL actual que se escribe.
Además, siempre recuerde desinfectar sus entradas!
- Android: la base de datos está bloqueada
- Android: Administración de diferentes URL de servidor para el desarrollo y la versión