gpt4 book ai didi

Android SQLite Journal 行为改变了吗?

转载 作者:IT王子 更新时间:2023-10-29 06:32:13 25 4
gpt4 key购买 nike

我的想法是,SQLite 日志只会在有未决操作时保留在文件系统中。

但是,在我看来,至少在 Android 4.1+ 中,正常行为是 SQLite 日志保留在文件系统中,即使在将事务设置为成功/结束,甚至关闭数据库之后也是如此。

有人知道为什么以及何时会改变这种行为吗?

最佳答案

@CL 是对的,日志模式似乎会根据 API 级别而改变(也许它也会因制造商而改变?)。

但是,为了将来引用,我在几个 API 级别查询了数据库中的 journal_mode,结果是:

  • Android 2.3.7 (API 10) = 删除
  • Android 4.0.4 (API 15) = 截断
  • Android 4.1.1 (API 16) = 坚持
  • Android 4.3.0 (API 18) = 坚持
  • Android 4.4.4 (API 19) = 坚持
  • Android 5.0.0 (API 21) = 坚持
  • Android 5.1.0 (API 22) = 坚持

获取日志模式的代码:

Cursor c = db.rawQuery("PRAGMA journal_mode;", null);
c.moveToFirst();
String journalMode = c.getString(c.getColumnIndex("journal_mode"));

关于日志模式:

DELETE 日志记录模式是正常行为。在 DELETE 模式下,回滚日志在每个事务结束时被删除。实际上,删除操作是导致事务提交的操作。

TRUNCATE 日志模式通过将回滚日志截断为零长度而不是删除它来提交事务。在许多系统上,截断文件比删除文件要快得多,因为不需要更改包含目录。

PERSIST 日志模式防止回滚日志在每个事务结束时被删除。相反,日志的标题被零覆盖。这将防止其他数据库连接回滚日志。 PERSIST 日志记录模式可用作平台上的优化,在这些平台上,删除或截断文件比用零覆盖文件的第一个 block 要昂贵得多。

More info

关于Android SQLite Journal 行为改变了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29676899/

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