【问题标题】:Two databases are shown when only one is created in Android using SQLite databases使用 SQLite 数据库在 Android 中仅创建一个时显示两个数据库
【发布时间】:2013-11-13 06:30:26
【问题描述】:

这个问题只是出于好奇!我在android上实现了一个数据库DB1。但是当我在主要活动中调用方法this.databaselist 时,我看到两个数据库存在DB1DB-journal。为什么android会自动创建第二个数据库?在处理多个数据库时,我们是否也需要处理这些期刊数据库?

【问题讨论】:

标签: android eclipse android-sqlite


【解决方案1】:

SQLite 使用临时文件的方式不被视为 SQLite 与应用程序签订的合同的一部分。

journal 是一个临时文件,用于在 SQLite 中实现原子提交和回滚功能。日志始终与数据库文件位于同一目录中,并且与数据库文件具有相同的名称,但附加了 8 个字符 "-journal"

日志通常在事务首次启动时创建,通常在事务提交或回滚时删除。日志文件对于实现 SQLite 的原子提交和回滚功能至关重要。如果没有日志,SQLite 将无法回滚不完整的事务,并且如果在事务中间发生崩溃或断电,则整个数据库可能会在没有回滚日志的情况下损坏。

日志通常分别在事务的开始和结束时创建和销毁。但是这个规则也有例外。

如果在事务处理过程中发生崩溃或断电,则日志文件将保留在磁盘上。下次另一个应用程序尝试打开数据库文件时,它会注意到废弃的回滚日志(在这种情况下我们称之为“热日志”)的存在,并使用日志中的信息将数据库恢复到之前的状态不完整事务的开始。这就是 SQLite 实现原子提交的方式。

如果应用程序使用 pragma 将 SQLite 置于独占锁定模式:

   PRAGMA locking_mode=EXCLUSIVE;

更多详情Check

【讨论】:

    【解决方案2】:

    您可以选择将日志保存在内存中,这样就不会创建 -journal 文件:

    pragma journal_mode=memory;
    

    请注意,每次打开数据库时都需要运行它。

    信用在这里:How to disable Android SQLite Journal file?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多