SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Verhalten von Android SQLite Journal geändert?

@CL hat Recht, der Journalmodus scheint sich je nach API-Level zu ändern (vielleicht ändert er sich auch je nach Hersteller?).

Für zukünftige Referenzzwecke habe ich jedoch die Datenbank für den Journal_mode in mehreren API-Ebenen abgefragt und die Ergebnisse sind:

  • Android 2.3.7 (API 10) =löschen
  • Android 4.0.4 (API 15) =abschneiden
  • Android 4.1.1 (API 16) =bestehen bleiben
  • Android 4.3.0 (API 18) =bestehen bleiben
  • Android 4.4.4 (API 19) =bestehen bleiben
  • Android 5.0.0 (API 21) =bestehen bleiben
  • Android 5.1.0 (API 22) =bestehen bleiben

Code zum Aufrufen des Journalmodus:

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

Über die Journalmodi:

Der DELETE-Journalmodus ist das normale Verhalten. Im DELETE-Modus wird das Rollback-Journal am Ende jeder Transaktion gelöscht. Tatsächlich ist die Löschoperation die Aktion, die bewirkt, dass die Transaktion festgeschrieben wird.

Der TRUNCATE-Journalmodus schreibt Transaktionen fest, indem er das Rollback-Journal auf die Länge null kürzt, anstatt es zu löschen. Auf vielen Systemen ist das Abschneiden einer Datei viel schneller als das Löschen der Datei, da das enthaltende Verzeichnis nicht geändert werden muss.

Der Journalmodus PERSIST verhindert, dass das Rollback-Journal am Ende jeder Transaktion gelöscht wird. Stattdessen wird der Kopf des Journals mit Nullen überschrieben. Dadurch wird verhindert, dass andere Datenbankverbindungen das Journal zurücksetzen. Der PERSIST-Journalmodus ist als Optimierung auf Plattformen nützlich, auf denen das Löschen oder Abschneiden einer Datei viel teurer ist als das Überschreiben des ersten Blocks einer Datei mit Nullen.

Weitere Informationen