【问题标题】:database disk image is malformed or file is encrypted or is not a database数据库磁盘映像格式错误或文件已加密或不是数据库
【发布时间】:2012-04-18 13:33:19
【问题描述】:

我需要将没有“Root”的手机的数据库复制到pad。所以我也采用了和其他人一样的方法:首先将/data/data/../databases/test.db复制到/sdcard。并且然后我在我的电脑或朋友的电脑上使用 adb shell sqlite3 命令,有一些问题:1)有时,它可以成功打开 2)有时,它显示“文件已加密或不是数据库” 3)有时,它显示“数据库磁盘映像格式错误”

注意:sqlite3 版本不同。

“文件被加密或不是数据库”的根本原因是版本问题,对吗?

“数据库磁盘映像格式错误”的根本原因是什么?我在互联网上搜索了一些关于它的信息,但我仍然无法修复它。

谢谢!

编辑1:测试手机是HTC HD 编辑2:我这个线程:http://groups.google.com/group/android-developers/browse_thread/thread/2b8a8fa9b955eecd/0615c6111d93ea02?lnk=raot 有消息:我强烈建议你不要这样做。有 不保证二进制数据库文件将兼容 Android 版本,而且在所有自定义 ROM 中要少得多。

似乎“数据库磁盘映像格式错误”的根本原因是Sqlite3版本。但是如何将数据库备份到 sdcard 是最好的方法呢?还有其他方法吗?

编辑 3:link 1 link 2 link 3

【问题讨论】:

  • 在你链接的帖子里,有很多关于数据库文件没有被正确复制的帖子

标签: android sqlite


【解决方案1】:

我的直觉是认为数据库文件在传输过程中以某种方式损坏。根据我的经验,如果一个数据库文件损坏了,它就完成了。

您应该使用following pragma 验证源和目标上的数据库文件都没有损坏:

PRAGMA integrity_check; 

如果一切正常,结果集是一个值为ok的单列记录。

需要明确的是,对于以下三种情况中的任何一种,您的数据库都已损坏且无法使用:

  • sqlite3 甚至不会打开数据库文件并返回一些错误
  • sqlite3 会打开数据库文件,但是当你运行一些语句时会返回一些错误
  • sqlite3 将打开数据库文件,但pragma integrity_check 不返回ok

由于您的源和目标似乎都在使用 sqlite 3.x.y.z,因此文件格式不应该成为问题(有一些例外,但我怀疑它们中的任何一个都是源你的痛苦)。

您可能想要做的另一件事是验证源文件和目标文件是否相同。您可以比较它们的哈希值(md5、sha1 或其他)。

【讨论】:

    猜你喜欢
    • 2011-07-13
    • 2014-05-02
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多