我无法从SQLite数据库中获取blob。当我尝试SELECT语句时,我只得到第一个NUL的几个字符,然后停止。
我的目标是将blob保存为zip文件(这是blob的内容),以便与其他应用程序进行进一步处理。我能够通过SELECT hex(数据)成功获得blob的十六进制版本,但这并没有帮助我,因为它没有正确格式化。我在Android手机上使用BusyBox,并且有一个hexcode -r命令可以反转十六进制输出,但它只有在格式化为Canonical hex + ASCII显示时才有效。因此,我想获取blob文本,因为我可以将其保存为zip文件。
那么,我怎样才能获得包含NUL字符的整个blob?我读过关于绑定的内容,但我不太了解它。如果这是解决方案,我将如何在带有Busybox的Android的shell命令中编写它?
答案 0 :(得分:0)
NUL被解释为终止符。
确保Blob 总是作为blob访问,即,不要尝试使用SQL中的值执行任何字符串操作,使用getBlob之类的函数而不是{{ 1}},并使用字节数组而不是字符串:
getString
答案 1 :(得分:0)
在这里工作了大约8个小时后,我终于得到了我需要的东西。这是我使用的命令:
echo -ne "$(echo | sqlite3 /data/data/com.google.android.apps.googlevoice/databases/model.db "SELECT HEX(data) FROM conversations LIMIT 1;" | sed -e 's/../\\x&/g')" > /sdcard/output.zip
结果是在数据库中存储为blob的zip文件。我希望这有助于将来的某个人!