我需要将数据库从没有“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卡是最好的方法?还有其他方法吗?
答案 0 :(得分:0)
我的直觉是认为数据库文件在传输过程中会以某种方式损坏。根据我的经验,如果数据库文件已损坏,则已完成。
您应使用following pragma验证源和目标上的数据库文件是否已损坏:
PRAGMA integrity_check;
如果一切正常,则结果集为单列记录,其值为ok
。
为了清楚起见,对于以下三种情况中的任何一种情况,您的数据库都已损坏且无法使用:
pragma integrity_check
不会返回ok
由于你的源和目标似乎都在使用sqlite 3.xyz,文件格式不应该成为一个问题(有一些例外,但我怀疑它们中的任何一个都是来源你的痛苦)。
您可能想要做的另一件事是验证源和目标上的文件是否相同。您可以比较它们的哈希值(md5,sha1或其他)。