Wie führe ich Checkpoint in SQLite Android manuell aus?Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Wie führe ich Checkpoint in SQLite Android manuell aus?

Post by Anonymous »

Ich versuche, eine Sicherung meiner SQLite -Datenbank zu erstellen, und ich möchte zuerst den Inhalt der Wal -Datei in der DB spülen.

Code: Select all

public class MyDBHelper extends SQLiteOpenHelper {

private Context mContext;
private static MyDBHelper mInstance = null;

private MyDBHelper(final Context context, String databaseName) {
super(new MYDB(context), databaseName, null, DATABASE_VERSION);
this.mContext = context;
}

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
public static MyDBHelper getInstance(Context context) {

if (mInstance == null) {
mInstance = new MyDBHelper(context, DATABASE_NAME);
}
return mInstance;
}

private void closeDataBase(Context context) {
getInstance(context).close();
}

}
< /code>

Ich verstehe jetzt, dass nach Abschluss eines Checkpoint die mydb.db-Wal-Datei leer sein sollte. Ist das richtig?    public Completable flushWalInDB() {
return Completable.fromAction(new Action() {
@Override
public void run() throws Exception {
getInstance(mContext).getReadableDatabase().rawQuery("pragma wal_checkpoint;", null);
}
});
}
< /code>

Dies wirft keinen Fehler aus, scheint aber nichts zu tun. Nachdem ich dies ausgeführt hatte, überprüfte ich meine mydb.db-wal-Datei physisch und hatte die gleiche Größe. Ich habe auch das DB auf dem Gerät überprüft und in der Datenbank wurde nichts hinzugefügt. Nachdem ich herumgegraben hatte, fand ich dieses
...    public Completable flushWalInDB() {
return Completable.fromAction(new Action() {
@Override
public void run() throws Exception {
getInstance(mContext).getReadableDatabase().execSQL("pragma wal_checkpoint;");
}
});
}
< /code>

Wenn ausgeführt wird, wirft ein Fehler aus: < /p>

unknown error (code 0): Queries can be performed using SQLiteDatabase query or rawQuery methods only.
Und basierend auf dieser Antwort [https://stackoverflow.com/a/19574341/2610933], ich habe auch versucht, das DB zu vakuumieren, aber nichts scheint zu passieren. public Completable vacuumDb() {
return Completable.fromAction(new Action() {
@Override
public void run() throws Exception {
getInstance(mContext).getReadableDatabase().execSQL("VACUUM");
}
});
}
}
< /code>

Wie ist die richtige Art, die Wal -Datei in der DB zu spülen, bevor er eine Sicherung erstellt? < /p>

Danke. < /p>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post