Per aggiungere ulteriori punti mancanti qui, secondo la richiesta di Jaskey
La versione del database è memorizzata nel SQLite
file del database.
la cattura è il costruttore
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
Pertanto, quando il costruttore dell'helper del database viene chiamato con un name
(2o parametro), la piattaforma verifica se il database esiste o meno e se il database esiste, ottiene le informazioni sulla versione dall'intestazione del file del database e attiva la richiamata corretta
Come già spiegato nella risposta precedente, se il database con il nome non esiste, si innesca onCreate
.
Di seguito la spiegazione spiega il onUpgrade
caso con un esempio.
Supponiamo che la tua prima versione dell'applicazione abbia avuto DatabaseHelper
(estendendo SQLiteOpenHelper
) la versione di passaggio del costruttore come 1
e quindi hai fornito un'applicazione aggiornata con il nuovo codice sorgente con la versione passata come 2
, quindi automaticamente quando DatabaseHelper
viene costruita, la piattaforma si innesca onUpgrade
vedendo il file già esistente, ma la versione è inferiore alla versione corrente che hai superato.
Ora supponiamo che stai pianificando di fornire una terza versione dell'applicazione con la versione db come 3
(la versione db viene aumentata solo quando lo schema del database deve essere modificato). In tali aggiornamenti incrementali, è necessario scrivere la logica di aggiornamento da ciascuna versione in modo incrementale per un codice gestibile migliore
Esempio di pseudo codice di seguito:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion) {
case 1:
//upgrade logic from version 1 to 2
case 2:
//upgrade logic from version 2 to 3
case 3:
//upgrade logic from version 3 to 4
break;
default:
throw new IllegalStateException(
"onUpgrade() with unknown oldVersion " + oldVersion);
}
}
Si noti la break
dichiarazione mancante nel caso 1
e 2
. Questo è ciò che intendo per aggiornamento incrementale.
Dire se la vecchia versione è 2
e nuove versioni 4
, allora la logica sarà l'aggiornamento del database da 2
a 3
e poi a4
Se vecchia versione è 3
e nuove versioni 4
, sarà solo eseguire la logica di aggiornamento per 3
a4