Per aggiungere ulteriori punti mancanti qui, secondo la richiesta di Jaskey
La versione del database è memorizzata nel SQLitefile 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 onUpgradecaso con un esempio.
Supponiamo che la tua prima versione dell'applicazione abbia avuto DatabaseHelper(estendendo SQLiteOpenHelper) la versione di passaggio del costruttore come 1e quindi hai fornito un'applicazione aggiornata con il nuovo codice sorgente con la versione passata come 2, quindi automaticamente quando DatabaseHelperviene costruita, la piattaforma si innesca onUpgradevedendo 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 breakdichiarazione mancante nel caso 1e 2. Questo è ciò che intendo per aggiornamento incrementale.
Dire se la vecchia versione è 2e nuove versioni 4, allora la logica sarà l'aggiornamento del database da 2a 3e poi a4
Se vecchia versione è 3e nuove versioni 4, sarà solo eseguire la logica di aggiornamento per 3a4