如何强制sqlite将日志文件合并到主数据库?

时间:2015-07-09 19:25:08

标签: android database sqlite

我有一个应用程序,用事务写入数据库。据我所知,sqlite会写入日志文件,然后在日志文件达到一定大小后将其合并。我还有尝试将数据库文件复制到另一个位置的功能。我的问题是我找不到强制sqlite将日志合并到主数据库的方法。

我的所有查询都看起来像这样

SQLiteDatabase database =null;
try{
    database = getReadableDatabase();

    //PERFORM SOME INSERT

   }
   catch (Exception e){
            Log.e(TAG, "Error with insert");
   }
   finally {
        if( database != null){
            database.close();
        }
  }

执行这些方法后,我将关闭应用程序并检查应用程序保存其数据库的目录。我可以看到数据库文件和数据库日志。

我正在尝试做类似

的事情
public void copyDatabase(){
    //FORCE MERGE

    //DO OTHER OPERATIONS
}

有人对如何在需要时合并日志文件有任何想法吗?

1 个答案:

答案 0 :(得分:3)

日志仅包含有关未提交事务的信息。如果您确定数据库未从任何地方打开,则日志文件未被使用,只需复制核心数据库文件即可。

<强>详情

Sqlite有multiple journal modes,包括DELETE,它会在最后一个交易终止时删除日记。

然而,android下的default journal modePERSIST,这意味着即使数据库引擎当前没有使用,日志文件也不会自动删除。

可以在android:Android SQLite - changing journal_mode

中更改日记帐模式
db.rawQuery("PRAGMA journal_mode=OFF", null).close();

请注意warning

  

使用enableWriteAheadLogging()时,此类会自动管理journal_mode。因此,如果您的应用使用enableWriteAheadLogging()

,请不要使用“PRAGMA journal_mode”语句设置journal_mode