我有一个可通过事务写入数据库的应用程序.我知道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
}
在需要时,有人对如何合并日记文件有任何想法吗?
解决方法:
该日志仅包含有关未提交交易的信息.如果您确定没有从任何地方打开数据库,则说明日记文件没有被使用,可以简单地复制核心数据库文件.
细节
Sqlite有multiple journal modes,其中包括DELETE,它在最后一个事务终止时删除日记.
但是,android下的default journal mode是PERSIST,这意味着即使当前不使用日志文件,数据库引擎也不会自动删除该日志文件.
可以在Android中更改日志模式:Android SQLite – changing journal_mode
db.rawQuery("PRAGMA journal_mode=OFF", null).close();
请注意0??7003,但是:
When using enableWriteAheadLogging(), journal_mode is automatically managed by this class. So, do not set journal_mode using “PRAGMA journal_mode'” statement if your app is using enableWriteAheadLogging()
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!