我需要将没有“Root”的手机上的数据库复制到pad上。所以我也采用了像其他人一样的方法:首先将/data/data/../databases/test.db复制到/sdcard。然后我使用在我的电脑或我朋友的电脑上使用adb shell sqlite3命令,出现一些问题: 1)有时,它可以成功打开 2)有时,它显示“文件已加密或不是数据库” 3)有时,它显示“数据库磁盘映像格式错误”
注意:sqlite3版本不同。
“文件已加密或不是数据库”的根本原因是版本问题,是吗?
“数据库磁盘映像格式错误”的根本原因是什么?我在互联网上搜索了一些有关它的信息,但我仍然无法修复它。
Thanks!
编辑1:测试手机是HTC HD
编辑2:我这个线程:http://groups.google.com/group/android-developers/browse_thread/thread/2b8a8fa9b955eecd/0615c6111d93ea02?lnk=raot http://groups.google.com/group/android-developers/browse_thread/thread/2b8a8fa9b955eecd/0615c6111d93ea02?lnk=raot有消息称:我强烈建议您不要这样做。有
不保证二进制数据库文件跨平台兼容
Android 版本,更不用说所有自定义 ROM 了。
看来“数据库磁盘映像格式错误”的根本原因是Sqlite3版本。但是如何将数据库备份到SD卡是最好的方法呢?还有其他方法吗?
Edit 3: link 1 https://stackoverflow.com/questions/10342535/issue-file-is-encrypted-or-is-not-a-database-opening-a-sqlite-file-in-some-and
link 2 https://stackoverflow.com/questions/6444170/sqlite3-wal-databaseerror-file-is-encrypted-or-is-not-a-database
link 3 https://stackoverflow.com/questions/4718934/sqlite-issues-with-htc-desire-hd
我的直觉是认为数据库文件在传输过程中以某种方式损坏。根据我的经验,如果数据库文件损坏,那就完了。
您应该使用以下命令验证源和目标上的数据库文件都没有损坏遵循编译指示 http://www.sqlite.org/pragma.html#pragma_integrity_check:
PRAGMA integrity_check;
如果一切顺利,结果集是带有值的单列记录ok
.
需要明确的是,对于以下三种情况中的任何一种,您的数据库几乎已损坏且无法使用:
- sqlite3 甚至不会打开数据库文件并返回一些错误
- sqlite3将打开数据库文件,但在运行某些语句时返回一些错误
- sqlite3将打开数据库文件,但是
pragma integrity_check
不回来ok
由于您的源和目标似乎都使用 sqlite 3.x.y.z,因此文件格式不应该是一个问题(有一些例外,但我怀疑它们中的任何一个都是您痛苦的根源)。
您可能想要做的另一件事是验证文件在源和目标处是否相同。您可以比较它们的哈希值(md5、sha1 或其他)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)