sql >> Database >  >> RDS >> SQLite

Gedrag van Android SQLite Journal veranderd?

@CL heeft gelijk, de journaalmodus lijkt te veranderen afhankelijk van het API-niveau (misschien verandert het ook per fabrikant?).

Voor toekomstig gebruik heb ik echter de database voor de journal_mode op verschillende API-niveaus opgevraagd en de resultaten zijn:

  • Android 2.3.7 (API 10) =verwijderen
  • Android 4.0.4 (API 15) =afkappen
  • Android 4.1.1 (API 16) =volhouden
  • Android 4.3.0 (API 18) =volhouden
  • Android 4.4.4 (API 19) =volhouden
  • Android 5.0.0 (API 21) =volhouden
  • Android 5.1.0 (API 22) =volhouden

Code voor het verkrijgen van de journaalmodus:

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

Over de journaalmodi:

De DELETE-journaalmodus is het normale gedrag. In de VERWIJDEREN-modus wordt het terugdraaiboek verwijderd aan het einde van elke transactie. De wisbewerking is inderdaad de actie die ervoor zorgt dat de transactie wordt vastgelegd.

De TRUNCATE-journaalmodus legt transacties vast door het terugdraaien van het journaal af te kappen tot de lengte nul in plaats van het te verwijderen. Op veel systemen is het afkappen van een bestand veel sneller dan het verwijderen van het bestand, omdat de bevattende map niet hoeft te worden gewijzigd.

De PERSIST-journaalmodus voorkomt dat het terugdraaijournaal aan het einde van elke transactie wordt verwijderd. In plaats daarvan wordt de kop van het journaal overschreven met nullen. Dit voorkomt dat andere databaseverbindingen het journaal terugdraaien. De PERSIST-journaalmodus is handig als optimalisatie op platforms waar het verwijderen of afkappen van een bestand veel duurder is dan het eerste blok van een bestand met nullen te overschrijven.

Meer info



  1. FrankenQueries:wanneer SQL en NoSQL botsen

  2. Oracle-gegevenstypen

  3. Hoe selecteer ik slechts 1 rij van Oracle SQL?

  4. Wat is er nieuw in ProxySQL 2.0