Я пытаюсь создать резервную копию моей базы данных sqlite, и я хочу сначала очистить содержимое файла WAL в db.
Вот мой SQLiteOpenHelper:
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();
}
}
Насколько я понимаю, после завершения контрольной точки файл mydb.db-wal должен быть пустым. Это правильно?
Вот что я пробовал до сих пор: 1.
public Completable flushWalInDB() {
return Completable.fromAction(new Action() {
@Override
public void run() throws Exception {
getInstance(mContext).getReadableDatabase().rawQuery("pragma wal_checkpoint;", null);
}
});
}
Это не вызывает ошибки, но, похоже, ничего не делает. После запуска я физически проверил свой файл mydb.db-wal и получил тот же размер. Я также проверил db на устройстве, и в базу ничего не добавлено
Покопавшись, я нашел это [https://stackoverflow.com/a/30278485/2610933visible[1provided и попробовал это:
2.
public Completable flushWalInDB() {
return Completable.fromAction(new Action() {
@Override
public void run() throws Exception {
getInstance(mContext).getReadableDatabase().execSQL("pragma wal_checkpoint;");
}
});
}
При запуске выдает ошибку:
unknown error (code 0): Queries can be performed using SQLiteDatabase query or rawQuery methods only.
И, основываясь на этом ответе [https://stackoverflow.com/a/19574341/2610933visible[1provided, Я также пытался ВАКУУМИВАТЬ БД, но, похоже, ничего не произошло.
public Completable vacuumDb() {
return Completable.fromAction(new Action() {
@Override
public void run() throws Exception {
getInstance(mContext).getReadableDatabase().execSQL("VACUUM");
}
});
}
}
Как правильно очистить файл WAL в БД перед созданием резервной копии?
Спасибо.