【问题标题】:Windows Phone 8.1 corrupting SQLite DatabaseWindows Phone 8.1 损坏 SQLite 数据库
【发布时间】:2014-11-16 03:13:28
【问题描述】:

我有一个 Windows Phone 8 应用程序,一些使用 Windows Phone 8.1 的用户报告了它的问题。似乎 SQLite 文件正在以某种方式损坏。

该应用包括以下项目参考:

  • 适用于 Windows Phone 的 SQLite(SQLite.WP80,版本=3.8.5)
  • Sqlite

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

该应用允许下载 SQLite 文件以使大量数据离线可用。该应用程序仅以只读模式打开这些应用程序,从下面的代码 sn-p 可以看出。两个可用的 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”来比较这两个文件时,它确实显得不同。这是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

用户提供的详细信息:

电话硬件是:

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

电话号码是:

  • 列表项
  • Windows 8.1 青色
  • 版本:8.10.12393.890

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

有什么想法吗?

【问题讨论】:

  • 我在存储大文件时使用 SD 卡的体验一直很糟糕,尤其是当它被大量写入时——比如你正在执行大量插入操作。即使是 10 级(我们使用的)最终也会崩溃。
  • 如果文件是只读的,请计算其中部分的校验和,以便您可以重新下载它们。
  • @CL。 - 据我了解,文件每次被替换时都会不断损坏,所以我认为这不会有帮助。我应该想象如果也更新这将是相同的。
  • @ChubosaurusSoftware - 我的应用程序仅使用只读数据库文件,但我猜其他应用程序可能正在读取/写入 SD 卡的其他部分。我希望这不会导致问题,但这对我来说是新的。

标签: c# sqlite windows-phone-8 windows-phone-8.1 corruption


【解决方案1】:

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

“在 625 上恢复出厂设置可以解决问题,这直接表明 8.0 到 8.1 的升级过程存在缺陷。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多