SQLite
 sql >> Database >  >> RDS >> SQLite

Il comportamento di Android SQLite Journal è cambiato?

@CL ha ragione, la modalità journal sembra cambiare a seconda del livello API (forse cambia anche dal produttore?).

Tuttavia, per riferimento futuro, ho interrogato il database per journal_mode in diversi livelli API e i risultati sono:

  • Android 2.3.7 (API 10) =elimina
  • Android 4.0.4 (API 15) =tronca
  • Android 4.1.1 (API 16) =persiste
  • Android 4.3.0 (API 18) =persiste
  • Android 4.4.4 (API 19) =persiste
  • Android 5.0.0 (API 21) =persiste
  • Android 5.1.0 (API 22) =persiste

Codice per ottenere la modalità journal:

Cursor c = db.rawQuery("PRAGMA journal_mode;", null);
c.moveToFirst();
String journalMode = c.getString(c.getColumnIndex("journal_mode"));

Informazioni sulle modalità diario:

La modalità DELETE journaling è il comportamento normale. Nella modalità DELETE, il giornale di rollback viene eliminato al termine di ogni transazione. In effetti, l'operazione di eliminazione è l'azione che determina il commit della transazione.

La modalità di inserimento nel journal TRUNCATE esegue il commit delle transazioni troncando il giornale di rollback a lunghezza zero invece di eliminarlo. Su molti sistemi, troncare un file è molto più veloce dell'eliminazione del file poiché non è necessario modificare la directory che lo contiene.

La modalità di inserimento nel journal PERSIST impedisce l'eliminazione del diario di rollback alla fine di ogni transazione. Al contrario, l'intestazione del giornale di registrazione viene sovrascritta con zeri. Ciò impedirà ad altre connessioni al database di eseguire il rollback del journal. La modalità di journaling PERSIST è utile come ottimizzazione su piattaforme in cui eliminare o troncare un file è molto più costoso che sovrascrivere il primo blocco di un file con zeri.

Maggiori informazioni