2010-10-14 9 views
10

Ho praticamente finito di sviluppare un'app per Android che utilizza database SQLite che copio nell'area dati utente sul dispositivo, ad esempio /data/data/com.company.app/databases/users .dbAndroid gestisce gli aggiornamenti delle app e le modifiche al database

Non sono sicuro di come avvenga la procedura di aggiornamento delle app del marketplace e sono anche incerto su come potrei testarlo.

Attualmente controllo se il database esiste sul dispositivo e lo copio se non lo fa (generalmente si verifica solo al primo avvio). Cosa succede se ho una nuova versione del database nella mia app aggiornata? Un aggiornamento del marketplace cancellerà i dati dell'utente in modo che copi il mio nuovo database al prossimo avvio?

Cosa succede in futuro se apporto modifiche al database/aggiungi record/etc e pacchetto con la nuova app? Questo database non sovrascriverà il vecchio database?

Altrimenti, per evitare di copiare e ignorare i database dal pacchetto di app ad ogni avvio c'è un modo per controllare la dimensione e la data dei file del database e copiare solo se il database nel pacchetto è più recente?

Se qualcuno ha bisogno di chiarimenti si prega di chiedere.

risposta

12

Sto facendo qualcosa di simile. Quello che ho fatto è impostare la versione del database, e poi quando controllo se il database esiste, devo anche assicurarmi che sia la versione corretta. Se non lo è, salvi i preferiti dell'utente dal database, cancella e ricopia il mio db, quindi rimetto i preferiti dell'utente.

Questo è il mio aggiornamento sulla

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    if (oldVersion == 2) { 

     System.out.println("Performing upgrade!"); 
     openDataBase(); 
     // save the old favorites 
     Cursor mCursor = getFavorites(); 
     ArrayList<Stop> favs = allCursorToStops(mCursor); 
     mCursor.close(); 

     deleteRecreate(db); 

     openDataBase(); 

     for (int i = 0; i < favs.size(); i++) 
      setFavorite(favs.get(i)); 

     close(); 

    } else { 

     deleteRecreate(db); 

    } 
} 

Qui è dove ho verificare l'esistenza/se necessario aggiornare ecc

boolean dbExist = checkDataBase(); 

    if(dbExist){ 
     // check if we need to upgrade 
     openDataBase(); 
     int cVersion = myDataBase.getVersion(); 
     close(); 
     if(cVersion != VERSION) 
      onUpgrade(myDataBase, myDataBase.getVersion(), VERSION); 
+1

e come ONUPGRADE (..) vengono chiamati? – Nativ

+0

@powerX onUpgrade viene chiamato automaticamente quando si incrementa il numero di versione del database. – ariets

+0

sì, già dopo. grazie – Nativ

Problemi correlati