2012-04-18 231 views
2

我需要将电话中没有“Root”的数据库复制到打印机中,因此我也采用其他方法:copy/data/data /。 ./databases/test.db首先到/ sdcard然后我在我的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有消息:我会强烈建议你不要这样做。 不能保证二进制数据库文件将在Android版本中兼容,并且在所有定制ROM中都少得多。

看来“数据库磁盘映像格式不正确”的根本原因是Sqlite3版本。但如何备份数据库到SD卡是最好的办法?还有其他方法吗?

编辑3:link 1 link 2 link 3

+0

在你链接的线程中,有很多关于数据库文件没有被正确复制的文章 – 2012-04-19 09:32:21

回答

0

我的直觉是,认为该数据库文件将成为传输过程中莫名其妙地损坏。根据我的经验,如果数据库文件已损坏,则完成此操作。

您应该验证数据库文件没有损坏源,并与following pragma目标上都:

PRAGMA integrity_check; 

如果一切都很好,结果集为单列纪录值ok

只要是明确的,对任何出现以下三种情形的,你的数据库是非常损坏,无法使用:

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

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

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

+0

谢谢你的回复。 – Judy 2012-04-18 14:29:59

相关问题