Android SQLite Journal行为发生了变化?

时间:2015-04-16 13:54:33

标签: android sqlite android-sqlite

我认为SQLite日志只会在有待处理的操作时保留在文件系统中。

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

是否有人知道此行为发生变化的原因和时间?

2 个答案:

答案 0 :(得分:5)

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

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

  • Android 2.3.7(API 10)=删除
  • Android 4.0.4(API 15)= truncate
  • Android 4.1.1(API 16)= persist
  • Android 4.3.0(API 18)= persist
  • Android 4.4.4(API 19)= persist
  • Android 5.0.0(API 21)= persist
  • Android 5.1.0(API 22)= persist

获取日记帐模式的代码:

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

关于期刊模式:

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

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

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

More info

答案 1 :(得分:2)

显然,Android版本的默认journal_mode setting不同。