我有一个应用程序,用事务写入数据库。据我所知,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
}
有人对如何在需要时合并日志文件有任何想法吗?
答案 0 :(得分:3)
日志仅包含有关未提交事务的信息。如果您确定数据库未从任何地方打开,则日志文件未被使用,只需复制核心数据库文件即可。
<强>详情
Sqlite有multiple journal modes,包括DELETE
,它会在最后一个交易终止时删除日记。
然而,android下的default journal mode是PERSIST
,这意味着即使数据库引擎当前没有使用,日志文件也不会自动删除。
可以在android:Android SQLite - changing journal_mode
中更改日记帐模式db.rawQuery("PRAGMA journal_mode=OFF", null).close();
请注意warning:
使用enableWriteAheadLogging()时,此类会自动管理journal_mode。因此,如果您的应用使用enableWriteAheadLogging()
,请不要使用“PRAGMA journal_mode”语句设置journal_mode