Windows Phone 8.1 损坏了 SQLite 数据库

本文关键字:坏了 SQLite 数据库 损坏 Phone Windows | 更新日期: 2023-09-27 18:30:30

我有一个Windows Phone 8

应用程序,Windows Phone 8.1上的一些用户报告了它的问题。似乎SQLite文件以某种方式损坏了。

该应用程序包括以下项目引用:

  • SQLite for Windows Phone (SQLite.WP80, version=3.8.5)
  • Sqlite

我正在使用Peter Huene的sqlite-net-wp8 3.8.5(通过NuGet)。

该应用程序允许下载SQLite文件,以使大量数据离线可用。该应用程序仅以只读模式打开这些应用程序,从下面的代码片段中可以看出。两个可用的SQLite数据库文件都非常大 - 1.8 GB和2.6 GB。用户可能会下载其中一个或两个文件。

using (SQLiteConnection conn = new SQLiteConnection(_filePath, SQLiteOpenFlags.ReadOnly))
{
    SQLiteCommand cmd = new SQLiteCommand(conn);
    cmd.CommandText = "SELECT EXISTS(SELECT 1 FROM tiles WHERE z=" + zoomLevel.ToString() + " AND x=" + x.ToString() + " AND y=" + y.ToString() + " LIMIT 1);";
    canProvideMapTile = cmd.ExecuteScalar<bool>();
}

我在日志中看到的错误是:

SQLite.SQLiteException: file is encrypted or is not a database
at SQLite.SQLite3.Prepare2(Database db, String query)
at SQLite.SQLiteCommand.Prepare()
at SQLite.SQLiteCommand.ExecuteScalar[T]()

从日志中,我可以看到 2 台设备遇到了此问题。两个设备 ID 都以"RM-941"开头,因此看起来它们都是 Lumia 625。也许问题仅限于这种特定型号的设备,或者只是巧合?下载大文件是可选的,仅供少数用户使用。

其中一个用户将该应用程序安装到手机SD卡,因此能够为我检索数据库文件。事实上,当我尝试使用 SQLite Expert 打开数据库文件时,我看到"文件已加密或不是数据库"消息。

该文件与未损坏的原始文件完全相同,但是当我运行"comp"来比较两个文件时确实看起来不同。这是补偿输出:

Compare error at OFFSET 0
file1 = DB
file2 = 53
Compare error at OFFSET 1
file1 = BD
file2 = 51
Compare error at OFFSET 2
file1 = 65
file2 = 4C
Compare error at OFFSET 3
file1 = 51
file2 = 69
Compare error at OFFSET 4
file1 = 45
file2 = 74
Compare error at OFFSET 5
file1 = BE
file2 = 65
Compare error at OFFSET 6
file1 = A7
file2 = 20
Compare error at OFFSET 7
file1 = 5E
file2 = 66
Compare error at OFFSET 8
file1 = 8A
file2 = 6F
Compare error at OFFSET 9
file1 = 4F
file2 = 72
10 mismatches - ending compare

用户提供的详细信息:

电话硬件是:

  • 卢米亚 625
  • 制造商: RM-941_[已删除]
  • 固件版本:3058.50000.1424.0003
  • 硬件版本:3.0.0.0
  • 无线电软件版本:3.2.28072.7
  • 芯片 SOC 版本:8930
  • 屏幕:480x800

电话操作系统是:

  • 列表项
  • 视窗 8.1 青色
  • 版本: 8.10.12393.890

用户已尝试卸载并重新安装应用,但问题仍然存在。

知道会发生什么吗?

Windows Phone 8.1 损坏了 SQLite 数据库

似乎手机存在通过恢复出厂设置解决的问题。引用解决问题的用户:

"在625上恢复出厂设置可以解决此问题,这直接指向有缺陷的8.0到8.1升级过程。