database - How to correctly handle select statements in SQLlite for android? -
please me in issue. developing application works big database in android. problem need big procedures specific info, application takes long respond , screen goes black until solve problem. put asynctask while finds response, nothing seems work.
this example method.
public arraylist<sgn_promociones> searchpromos(int p_cabped_id, int p_agrup_id, int cli_id) { int li_aplica = 0; int li_nro_agrup; // le asignamos por el momento el id del cliente que seleccionamos informacionproceso inp = new informacionproceso(); int ld_clie_id = 0; int ld_promo_id; int ld_promo_id1; string lv_descripcion_corta; char lv_aplica_a; string lv_aplica_as; string lv_indicador_evaluar; string lv_indicador_articulo_evaluar; string lv_otorga_puntos; string lv_indicador_obsequio; int ld_maximo_obsequio; string ld_indicador_aleatorio_id; string lv_estado; string lv_actividad; string lv_canal; string lv_subcanal; string lv_automatica_sn; cursor c = db .rawquery( "select id,descripcion_corta,aplica_a,indicador_evaluar,indicador_articulo_evaluar,otorga_puntos,indicador_obsequio,maximo_obsequio,indicador_aleatorio_id,automatica_sn sgn_promociones order id;", null); if (c.movetofirst()) { { li_aplica = 0; ld_clie_id = cli_id; ld_promo_id = c.getint(0); lv_descripcion_corta = c.getstring(1); lv_aplica_as = c.getstring(2); lv_indicador_evaluar = c.getstring(3); lv_indicador_articulo_evaluar = c.getstring(4); lv_otorga_puntos = c.getstring(5); lv_indicador_obsequio = c.getstring(6); ld_maximo_obsequio = c.getint(7); ld_indicador_aleatorio_id = c.getstring(8); lv_automatica_sn = c.getstring(9); ld_promo_id1 = 0; string s1 = "select distinct sg_promo_id sgn_bitacoras_promocion sg_cabped_id = " + p_cabped_id + " , sg_promo_id = " + ld_promo_id + " , estado = 'ius' , activo_inactivo = 'a'"; cursor c1 = db.rawquery(s1, null); if (c1.movetofirst()) { ld_promo_id1 = c1.getint(0); } else { ld_promo_id1 = 0; } c1.close(); if (ld_promo_id1 == 0) lv_estado = "i"; else lv_estado = "a"; lv_aplica_a = lv_aplica_as.charat(0); switch (lv_aplica_a) { case 't': s1 = "select count(a.nomenclatura) sgn_rutas a,sgn_territorios b,sgn_padrones c,sgn_target_promocion d a.sg_terri_id = b.id , a.nomenclatura = c.sg_ruta_nomenclatura , d.id = b.id , d.sg_promo_id = " + ld_promo_id + " , c.sg_clie_id =" + ld_clie_id; c1 = db.rawquery(s1, null); if (c1.movetofirst()) { li_aplica = c1.getint(0); } else { li_aplica = 0; } c1.close(); break; case 'r': s1 = "select count(a.nomenclatura) sgn_rutas a,sgn_padrones b,sgn_target_promocion c a.nomenclatura = b.sg_ruta_nomenclatura , c.id = a.nomenclatura , c.sg_promo_id = " + ld_promo_id + " , b.sg_clie_id = " + ld_clie_id; c1 = db.rawquery(s1, null); if (c1.movetofirst()) { li_aplica = c1.getint(0); } else { li_aplica = 0; } c1.close(); break; case 'n': s1 = "select count(cl.id) sgn_clientes cl,sgn_target_promocion tp cl.id = " + ld_clie_id + " , cl.sg_nac_actividad = substring(tp.id,1,1) , cl.sg_nac_canal = substring(tp.id,2,3) , cl.sg_nac_subcanal = substring(tp.id,5,3) , tp.sg_promo_id = " + ld_promo_id; c1 = db.rawquery(s1, null); if (c1.movetofirst()) { li_aplica = c1.getint(0); } else { li_aplica = 0; } c1.close(); break; case 'c': s1 = "select count(id) sgn_target_promocion sg_promo_id = " + ld_promo_id + " , id = " + ld_clie_id; c1 = db.rawquery(s1, null); if (c1.movetofirst()) { li_aplica = c1.getint(0); } else { li_aplica = 0; } c1.close(); break; case 'i': s1 = "select count(a.nomenclatura) sgn_rutas a,sgn_padrones b,sgn_target_promocion c a.nomenclatura = b.sg_ruta_nomenclatura , c.id = a.sg_tiprut_tipo , c.sg_promo_id = " + ld_promo_id + " , b.sg_clie_id = " + ld_clie_id; c1 = db.rawquery(s1, null); if (c1.movetofirst()) { li_aplica = c1.getint(0); } else { li_aplica = 0; } c1.close(); break; case 'p': s1 = "select count(a.sg_clie_id) sgn_clientes_plan_comercial a,sgn_target_promocion c a.sg_clie_id = " + ld_clie_id + " , c.id = a.sg_placom_id , c.sg_promo_id = " + ld_promo_id; c1 = db.rawquery(s1, null); if (c1.movetofirst()) { li_aplica = c1.getint(0); } else { li_aplica = 0; } c1.close(); break; case '*': li_aplica = 1; break; } if (li_aplica > 0) { if (p_agrup_id == 0 || lv_indicador_articulo_evaluar.equals("p")) { s1 = "insert tempsgn_pedidos values(" + ld_promo_id + ", '" + lv_descripcion_corta + "' ,'" + lv_estado + "' ,'" + lv_indicador_evaluar + "' ,'" + lv_indicador_articulo_evaluar + "' ,'" + lv_indicador_obsequio + "' ," + ld_maximo_obsequio + " ,'" + lv_otorga_puntos + "' ,'" + lv_automatica_sn + "')"; db.execsql(s1); } else if (lv_indicador_articulo_evaluar.equals("i")) { s1 = "select count(epr.id) sgn_promociones pr,sgn_evaluar_promocion epr,sgn_agrupamientos_articulo aa pr.id = epr.sg_promo_id , epr.id = aa.articulo_id , aa.sg_detagr_id = " + p_agrup_id + " , pr.id = " + ld_promo_id; c1 = db.rawquery(s1, null); if (c1.movetofirst()) { li_aplica = c1.getint(0); } else { li_aplica = 0; } c1.close(); if (li_aplica > 0) { s1 = "insert tempsgn_pedidos values(" + ld_promo_id + ", '" + lv_descripcion_corta + "' ,'" + lv_estado + "' ,'" + lv_indicador_evaluar + "' ,'" + lv_indicador_articulo_evaluar + "' ,'" + lv_indicador_obsequio + "' ," + ld_maximo_obsequio + " ,'" + lv_otorga_puntos + "' ,'" + lv_automatica_sn + "')"; db.execsql(s1); } } else if (lv_indicador_articulo_evaluar.equals("a")) { s1 = "select count(epr.id) sgn_promociones pr,sgn_evaluar_promocion epr pr.id = epr.sg_promo_id , pr.id = " + ld_promo_id; c1 = db.rawquery(s1, null); if (c1.movetofirst()) { li_nro_agrup = c1.getint(0); } else { li_nro_agrup = 0; } c1.close(); s1 = "select art.id,art.descripcion_corta,count(epr.id) nro_grupos sgn_promociones pr,sgn_evaluar_promocion epr," + "sgn_agrupamientos_articulo aa,articulos art pr.id = epr.sg_promo_id , epr.id = aa.sg_detagr_id , aa.articulo_id = art.id , aa.articulo_id in( select articulo_id " + "from sgn_agrupamientos_articulo sg_detagr_id = " + p_agrup_id + ") , pr.id = " + ld_promo_id + " group art.id,art.descripcion_corta"; int nrogrupost = 0; cursor c21 = db.rawquery(s1, null); if (c21.movetofirst()) { { if (c21.getint(2) == li_nro_agrup) { nrogrupost++; } } while (c21.movetonext()); } li_aplica = nrogrupost; c21.close(); if (li_aplica > 0) { s1 = "insert tempsgn_pedidos values(" + ld_promo_id + ", '" + lv_descripcion_corta + "' ,'" + lv_estado + "' ,'" + lv_indicador_evaluar + "' ,'" + lv_indicador_articulo_evaluar + "' ,'" + lv_indicador_obsequio + "' ," + ld_maximo_obsequio + " ,'" + lv_otorga_puntos + "' ,'" + lv_automatica_sn + "')"; db.execsql(s1); } } } } while (c.movetonext()); } arraylist<sgn_promociones> promociones = new arraylist<sgn_promociones>(); cursor c3 = db.rawquery("select * tempsgn_pedidos order descripcion_corta", null); if (c3.movetofirst()) { { sgn_promociones promo = new sgn_promociones(); promo.setid(c3.getint(0)); promo.setdescripcion_corta(c3.getstring(1)); promo.setestado(c3.getstring(2)); promo.setindicador_evaluar(c3.getstring(3)); promo.setindicador_articulo_evaluar(c3.getstring(4)); promo.setotorga_puntos(c3.getstring(5)); promo.setindicador_obsequio(c3.getstring(6)); promo.setmaximo_obsequio(c3.getint(7)); promo.setautomatica_sn(c3.getstring(8)); promociones.add(promo); } while (c3.movetonext()); } return promociones; }
in order process huge sqlite database in android, have use custom loaders
. improves database performance.
to understand concept of loader check this. implement it, check tutorial set-up custom loaders
or can find more in video.
hope works you.
Comments
Post a Comment