如何使用adb shell中的嵌套字符串执行sqlite3查询的一个线性命令?

问题描述 投票:0回答:1

我想用adb shell中的嵌套字符串执行SQLite 3的单行命令。

以下命令WORKS:

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" """;"

如你所知,我在'address =“+ 0012345”中更改了'read = 1''问题是SQLite 3选择的sms格式必须是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
windows sqlite adb su
1个回答
0
投票

我自己解决了:

adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db \"SELECT * FROM sms WHERE address=\"\\\"+0012345\"\\\"\"\"\";"

去搞清楚:)

© www.soinside.com 2019 - 2024. All rights reserved.