2012-04-06 10 views
5

Ich verwende Transaktionen, um mehrere Zeilen in Tabelle einzufügen. Aber ich sehe immer noch temporäre SQLite-Journal-Datei auf SD-Karte zusammen mit SQLite-Tabelle erstellt wird.Wie kann ich die Android SQLite Journal-Datei deaktivieren?

Wie deaktiviere ich die Erstellung der Journaldatei?

Dank

+3

Die Journaldatei wird von der SQL-Datenbank erstellt, wenn Sie Transaktionen verwenden, um sicherzustellen, dass die Datenbank nicht beschädigt wird, wenn die Transaktion aus irgendeinem Grund durch externe Methoden unterbrochen wird. Ich würde das allein lassen, wenn ich du wäre. –

+0

@ Mr.Will Also, warum wird auf Android das Journal aufbewahrt, wenn nichts die Datenbank berührt, wenn dies nicht das Standardverhalten auf anderen Systemen ist? – Michael

Antwort

8

Sie können wählen, um die Zeitschrift im Speicher zu halten, so dass keine -Journal Datei erstellt:

pragma journal_mode=memory; 

Beachten Sie, dass Sie benötigen diese jedesmal, wenn Sie die Datenbank öffnen, auszuführen.

Ich empfehle, dass Sie die folgenden Funktionen erhalten eine bessere Vorstellung von dem, was gelesen wird, geht:

http://www.sqlite.org/pragma.html#pragma_journal_mode

+0

Warum ist diese Datei immer noch da, nachdem 'PRAGMA journal_mode = OFF' verwendet wurde und die Datenbank geschlossen wurde? – Michael

+0

Funktioniert nicht. siehe: http://stackoverflow.com/questions/39246368/how-to-turn-off-journaling-sqlite-in-android?noredirect=1#comment65828847_39246368 –

5

Die Zeitschrift eine interne SQLite-Datei ist, die verwendet wird, wenn Transaktionen ausgeführt wird (um sicherzustellen, Rollback). Sie können es nicht deaktivieren, und Sie möchten nicht.

+3

Eigentlich kann man es deaktivieren :-) mit 'PRAGMA journal_mode = OFF' –

+0

Ich habe folgendes versucht: Cursor c1 = db.rawQuery (" PRAGMA journal_mode = OFF ", null); c1.schließen(). Scheint keinen Effekt zu haben. Ich sehe immer noch, dass die Journaldatei erstellt wird. – Arvind

+2

Ja, wie ich in meiner Antwort erwähnt habe, das Pragma bleibt nicht bestehen, so dass Sie es jedes Mal ausführen müssen, wenn Sie die DB öffnen. –

-1

Sie können unter Code Journaldatei löschen mit

@Override 
public void onOpen(SQLiteDatabase db) {   
    Cursor cc = db.rawQuery("PRAGMA journal_mode=DELETE",null); 
    Log.i(TAG,"--- cursor count " + cc.getCount());  
    super.onOpen(db);   
} 

Sie müssen verwenden Mauszeiger. Cursor ist eine Schnittstelle, die zufälligen Lese-/Schreibzugriff auf die von einer Datenbankabfrage zurückgegebenen Ergebnismenge bietet. Die Journaldatei wird gelöscht, wenn Sie den Cursor verwenden.

0

Bitte beachten Sie, dass die Aussage PRAGMA journal_mode=OFF oder PRAGMA journal_mode=memory pro Transaktionsbasis gültig ist. Sie müssen es für jede Transaktion festlegen.