我想使用来自adb shell的嵌套字符串执行SQLite 3的一个线性命令。
以下命令起作用:
adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db """SELECT * FROM sms WHERE read=1""";"
但是此命令无效:
adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db """SELECT * FROM sms WHERE address="+0012345" """;"
您注意到我在“地址=“ + 0012345””中更改了“读取= 1” 问题在于,短信的SQLite 3 select格式必须为TEST / STRING,而不是数字。 因此,select命令以(address =“)结尾,并且不吸收其后的内容(+0012345”')
有什么主意我该如何解决这个问题?
更新 失败的另一项试验,但可能会给某人一些指导:
我尝试在命令行中添加“ .explain”,以便查看sqlite3收到的命令。
adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db .explain \"SELECT * FROM sms WHERE address=\`\"\`\"+0012345\`\"\`\"\";\""
输出为
/system/bin/sh: ": not found
/system/bin/sh: ": not found
sqlite3: Error: too many options: "SELECT * FROM sms WHERE address="+0012345""
Use -help for a list of options.
/system/bin/sh: ": not found
因此,按要求,sqlite3似乎正在获取带引号“ +0012345”的电话号码! 但是,当我删除这样的“ .explain”
adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db \"SELECT * FROM sms WHERE address=\`\"\`\"+0012345\`\"\`\"\";\""
我得到以下输出:
/system/bin/sh: ": not found
/system/bin/sh: ": not found
/system/bin/sh: ": not found
答案 0 :(得分:0)
自己解决了这个问题:
adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db \"SELECT * FROM sms WHERE address=\"\\\"+0012345\"\\\"\"\"\";"
去图:)