gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:54:41 25 4
gpt4 key购买 nike

我有一个使用事务写入数据库的应用程序。我知道 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,它在最后一个事务终止时删除日志。

然而,default journal mode在 android 下是 PERSIST 意味着日志文件不会被数据库引擎自动删除,即使它当前没有被使用。

可以在 android 中更改日志模式:Android SQLite - changing journal_mode

db.rawQuery("PRAGMA journal_mode=OFF", null).close();

注意 warning , 然而:

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()

关于android - 如何强制 sqlite 将日志文件合并到主数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31326514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com