Android SQLite Journal行为已更改?

pan*_*dre 4 sqlite android android-sqlite

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

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

有人对为什么以及何时改变这种行为有想法吗?

pan*_*dre 5

@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"));
Run Code Online (Sandbox Code Playgroud)

关于日记模式:

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

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

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

更多信息