2

我需要将没有“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:链接 1 链接 2 链接 3

4

1 回答 1

0

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

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

PRAGMA integrity_check; 

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

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

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

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

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

于 2012-04-18T14:05:08.707 回答