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".
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
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
vBulletin® v3.8.1, Copyright ©2000-2025, Jelsoft Enterprises Ltd.