数据库磁盘映像格式错误或文件已加密或不是数据库

时间:2012-04-18 13:33:19

标签: android sqlite

我需要将数据库从没有“Root”的手机复制到打击垫。所以我也采用其他方法:首先将/data/data/../databases/test.db复制到/ sdcard。然后我在我的PC或朋友的PC上使用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有消息:我非常强烈建议你不要这样做。有 不保证二进制数据库文件将兼容 所有自定义ROM中的Android版本和更少的版本。

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

编辑3:link 1 link 2 link 3

1 个答案:

答案 0 :(得分:0)

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

您应使用following pragma验证源和目标上的数据库文件是否已损坏:

PRAGMA integrity_check; 

如果一切正常,则结果集为单列记录,其值为ok

为了清楚起见,对于以下三种情况中的任何一种情况,您的数据库都已损坏且无法使用:

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

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

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