sql >> Databasteknik >  >> RDS >> SQLite

Android SQLite Journals beteende har ändrats?

@CL har rätt, journalläget verkar ändras beroende på API-nivån (kanske ändras det också av tillverkaren?).

Men för framtida referens har jag frågat databasen för journal_mode i flera API-nivåer och resultaten är:

  • Android 2.3.7 (API 10) =radera
  • Android 4.0.4 (API 15) =trunkera
  • Android 4.1.1 (API 16) =kvarstår
  • Android 4.3.0 (API 18) =kvarstår
  • Android 4.4.4 (API 19) =kvarstår
  • Android 5.0.0 (API 21) =kvarstår
  • Android 5.1.0 (API 22) =kvarstår

Kod för att hämta journalläget:

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

Om journallägena:

DELETE journaling-läget är det normala beteendet. I DELETE-läget raderas återställningsjournalen vid slutförandet av varje transaktion. Faktum är att borttagningsoperationen är den åtgärd som gör att transaktionen genomförs.

TRUNCATE journaliseringsläget begår transaktioner genom att trunkera återställningsjournalen till noll i stället för att radera den. På många system går det mycket snabbare att trunkera en fil än att ta bort filen eftersom den innehållande katalogen inte behöver ändras.

PERSIST journaliseringsläget förhindrar att återställningsjournalen tas bort i slutet av varje transaktion. Istället skrivs journalens rubrik över med nollor. Detta förhindrar andra databasanslutningar från att rulla tillbaka journalen. PERSIST journaliseringsläget är användbart som en optimering på plattformar där det är mycket dyrare att ta bort eller trunkera en fil än att skriva över det första blocket i en fil med nollor.

Mer information



  1. Hur avinstallerar du MySQL från Mac OS X?

  2. INFOGA ... PÅ DUBLIKATNYCKEL (gör ingenting)

  3. Vad är skillnaden mellan att använda en korskoppling och att sätta ett kommatecken mellan de två tabellerna?

  4. Hur uppdaterar och tar man bort listan Visa data i SQLite-databas med klicklyssnare?