PDA

Ver la Versión Completa : Consulta a BD Sqlite con filtros variables


NairdaNightmare
09/06/15, 21:16:59
Hola foreros de HTCMania, tengo un problema con una aplicación que estoy haciendo y me preguntaba si alguno de vosotros podriais ayudarme.

Esta aplicacion tiene una base de datos SQLite y mi idea es que el usuario pueda elegir diferentes filtros para definir la busqueda, es decir, que pueda seleccionar los registros a ver buscando por un campo o por varios. Mi problema es que no se como ralizar esa consulta, ya que no se me ocurre como controlar los diferentes criterios porque no son fijos.

Un saludo y gracias de antemano.

kriogeN
10/06/15, 00:09:31
Todo depende de como lo estés planteando, suponiendo que uses el query normal y corriente en lugar del rawQuery, tendrás algo parecido a esto:

query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

Lo único que tendrías que hacer es modificar el parámetro "selection" y "selectionArgs" según los criterios que marque el usuario y luego llamar el método "query".

Dild0
10/06/15, 11:23:00
Como te dicen pues según lo estés planteando, yo que trabajo con bases de datos oracle pues me gusta montarme la query y uso rawquery, así que solo tendría que hacer una sql dinámica del estilo

'select * from tabla where 1=1 ' y apartir de aquí ir concatenando tus filtros 'and lo quesea' + 'and lo quesea2'' ...

NairdaNightmare
10/06/15, 12:00:38
Gracias a los dos por contestar. Como normalmente pasa ahora que tengo respuestas lo veo todo mas claro XD Creo que usare la rawQuery e ir concatenandolas.
Estaba bastante bloqueado constantemente pensando, ya pero si pongo AND delante de todos los WHERE me dara un error de sintaxis y bla bla bla XD
No puse (fallo mio) que tambien esta la opcion de que el usuario no pusiera ningun filtro y saliesen todos los registros de la table.
Lo que hare sera controlar que en el primer filtro, si lo hay, se ponga el WHERE mas la condicion y todos los siguientes, si los hay, tengan un AND delante.

Muchas gracias de nuevo a los dos XD

Dild0
10/06/15, 14:16:18
Gracias a los dos por contestar. Como normalmente pasa ahora que tengo respuestas lo veo todo mas claro XD Creo que usare la rawQuery e ir concatenandolas.
Estaba bastante bloqueado constantemente pensando, ya pero si pongo AND delante de todos los WHERE me dara un error de sintaxis y bla bla bla XD
No puse (fallo mio) que tambien esta la opcion de que el usuario no pusiera ningun filtro y saliesen todos los registros de la table.
Lo que hare sera controlar que en el primer filtro, si lo hay, se ponga el WHERE mas la condicion y todos los siguientes, si los hay, tengan un AND delante.

Muchas gracias de nuevo a los dos XD


Según te lo puse yo no tienes q controlar nada, ya que 'where 1=1' saca todo... a siq ue solo tienes que añadir los 'and' cuando tengas filtro

Sería algo asi

dummie_sql = 'Select * from tabla where 1=1'; --query que sacaría todo
filtros = ''; --filtro vacio


if (filtro1 == true){

filtros = filtros + ' and mifiltro1=xxxxx'

}

if (filtro2 == true){

filtros = filtros + ' and mifiltro2=yyyyy'

}

llamada al rawquery pasandole (dummie_sql + filtros )



Perdón si hay errores en el código que me lio con tanto lenguaje de programación.


PD: Ten cuidado si filtras texto y no te venga un ingles y ponga comilla I'm It's etc porque te revienta la query