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

Popular posts from this blog

python - Subclassed QStyledItemDelegate ignores Stylesheet -

java - HttpClient 3.1 Connection pooling vs HttpClient 4.3.2 -

SQL: Divide the sum of values in one table with the count of rows in another -