Autore Topic: Lentezza update / insert multipli  (Letto 514 volte)

Offline UmbySlipKnot

  • Nuovo arrivato
  • *
  • Post: 46
  • Respect: 0
    • Mostra profilo
Lentezza update / insert multipli
« il: 15 Gennaio 2013, 11:21:52 CET »
0
Ciao a tutti!
Nella mia applicazione faccio un parsing JSON e nel frattempo popolo una tabella del db.
A seconda del caso faccio una INSERT oppure un UPDATE, vedo che la execSQL("INSERT INTO...") oppure execSQL("UPDATE...") eseguita ad ogni iterazione mi rallenta tantissimo l'esecuzione.

Ecco il mio codice in breve:
Codice (Java): [Seleziona]
jObjectRecord = new JSONObject(jStringRecord);
JSONArray menuitemArray = jObjectRecord.getJSONArray("pv");
for (int i = 0; i < menuitemArray.length(); i++) {
    //Lettura dati generali
    JSONObject jobj = menuitemArray.getJSONObject(i);
    id = jobj.getInt("P1");
    ragione_sociale = jobj.getString("P2").toString().replace("'", "''");
    indirizzo = jobj.getString("P3").toString().replace("'", "''");
    citta = jobj.getString("P4").toString().replace("'", "''");
    cap = jobj.getString("P5").toString().replace("'", "''");
    provincia = jobj.getString("P6").toString().replace("'", "''");
    regione = jobj.getString("P7").toString().replace("'", "''");
    telefono = jobj.getString("P8").toString().replace("'", "''");
    fax = jobj.getString("P9").toString().replace("'", "''");
    email = jobj.getString("P10").toString().replace("'", "''");
    link = jobj.getString("P11").toString().replace("'", "''");
    latitudine = 0;
    if (jobj.has("P12") && jobj.getString("P12").toString() != "0") {
        String sLat = jobj.getString("P12").toString().replace(",", ".");
        double dLat = Double.parseDouble(sLat);
        latitudine = (int)(dLat * 1E6);
    }
    longitudine = 0;
    if (jobj.has("P13") && jobj.getString("P13").toString() != "0") {
        String sLon = jobj.getString("P13").toString().replace(",", ".");
        double dLon = Double.parseDouble(sLon);
        longitudine = (int)(dLon * 1E6);
    }
   
    if (idInDb("punti", "id", id)) {
        sqlRecord = "UPDATE punti SET ragione_sociale = '" + ragione_sociale + "',"
                +"indirizzo = '" + indirizzo + "', "
                +"citta = '" + citta + "', "
                +"cap = '" + cap + "', "
                +"provincia = '" + provincia + "', "
                +"regione = '" + regione + "', "
                +"telefono = '" + telefono + "', "
                +"fax = '" + fax + "', "
                +"email = '" + email + "', "
                +"link = '" + link + "', "
                +"latitudine = " + latitudine + ", "
                +"longitudine = " + longitudine + " "
                +"WHERE id = " + id + "; ";
    } else {
        sqlRecord = "INSERT INTO punti(id, ragione_sociale, indirizzo, citta, cap, provincia, regione, telefono, fax, email, link, latitudine, longitudine) "
                +"VALUES (" + id + ",'" + ragione_sociale + "','" + indirizzo + "','" + citta + "','" + cap + "','" + provincia + "','" + regione + "','" + telefono + "','" + fax + "','" + email + "','" + link + "', " + latitudine + ", " + longitudine + "); ";
    }
   
    App.myDB.getWritableDatabase().execSQL(sqlRecord);
   
    float fCoeff = ((float)i)/menuitemArray.length();
    int iProgress = (int)(fCoeff*100);
    publishProgress("Punti: " + iProgress);
}

Come posso accelerare il processo di inserimento?
Grazie

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Lentezza update / insert multipli
« Risposta #1 il: 15 Gennaio 2013, 11:28:49 CET »
0
vedi se questo post ti può aiutare, a me aveva aiutato
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline UmbySlipKnot

  • Nuovo arrivato
  • *
  • Post: 46
  • Respect: 0
    • Mostra profilo
Re:Lentezza update / insert multipli
« Risposta #2 il: 15 Gennaio 2013, 11:34:28 CET »
0
vedi se questo post ti può aiutare, a me aveva aiutato
Non vedo il link del post  :-)

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Lentezza update / insert multipli
« Risposta #3 il: 15 Gennaio 2013, 11:53:40 CET »
+1
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline UmbySlipKnot

  • Nuovo arrivato
  • *
  • Post: 46
  • Respect: 0
    • Mostra profilo
Re:Lentezza update / insert multipli
« Risposta #4 il: 24 Gennaio 2013, 14:48:16 CET »
0
Parsing lunghetto... - Android Developers Italia

Seguendo i consigli di quell'articolo sono riuscito ad ottimizzare il processo:
- ad ogni iterazione ho prima cancellato il record con una sqlitedatabase.delete e dopo ho utilizzato l'insert helper per inserire il record
- tutto il ciclo di aggiornamento è dentro una transaction

In ogni caso una buona regola di programmazione è quella di non scrivere mai le query di insert, update, delete a mano, giusto?
Grazie
« Ultima modifica: 24 Gennaio 2013, 14:50:47 CET da UmbySlipKnot »

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Lentezza update / insert multipli
« Risposta #5 il: 24 Gennaio 2013, 15:49:43 CET »
0
eh si, i prepared statment ecc di solito sono ottimizzati
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia