【问题标题】:I can't see the latest version of my application's database我看不到我的应用程序数据库的最新版本
【发布时间】:2021-12-28 00:38:33
【问题描述】:

要检查我的数据库,我总是打开设备文件资源管理器并导航到 package.name> 数据库> 在这里我找到 3 个文件:dbName、dbName-shm、dbName-wal。我占用的文件是dbName,所以我在选择文件保存路径后右键选择“另存为...”,后来我用一个名为“DB Browser for SQLite”的软件查看。

我在查看我的数据库时从来没有遇到过问题,但大约 1 周前开始出现问题,因为名为“dbName”的文件从未更新,我怎么知道?在“日期”列中,每个文件的最后修改日期,当我点击“同步”时,dbName.shm 和 dbName-wal 在“日期”中更改值,但“dbName”在打开文件时保留创建日期和时间“数据库浏览器”什么都没有。

有什么问题?保存我的数据库的路径是否已更改?

【问题讨论】:

  • 尝试将所有 3 个文件另存为同一位置,然后使用 DB Browser 打开。 -wal 文件(如果不是空的)是数据库的一部分。但是,话说,如果-wal文件不为空(或不存在)说明数据库没有关闭,那么确保数据库关闭比较安全(因此-wal文件应该为空或者不为空)存在)。

标签: java android sqlite


【解决方案1】:

您所描述的症状与 -wal(即 dbName-wal)执行其设计目的一致。

简短的解决方法是保存所有三个文件而不仅仅是 dbName 文件。

更好/更安全的解决方法是关闭数据库,确保数据库完全提交。

-wal 文件,如果它存在且不为空,则它是数据库的一部分。只打开 dbName 文件而不打开 -wal 文件将意味着缺少一些数据库。

-wal 文件用于记录更改,以便在需要或请求回滚时使用。因此,此类更改首先应用于 SQLite 知道是数据库一部分的 -wal 文件。如果需要回滚,可以删除 -wal 文件中的相关页面。

-wal 文件中保存的更改通过 COMMITS 应用到实际的数据库文件,其中一些默认情况下会自动执行。自动提交可能不会提交所有更改。但是,关闭数据库将提交所有更改。

你不妨看看https://sqlite.org/wal.html

【讨论】:

  • 多么棒的解释!保存所有 3 个文件对我有用。但我不想留下疑问,“关闭数据库”是什么意思?
  • @JP711 你使用 SQliteDatabase 的 close 方法关闭(假设使用内置 SQLite API)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多