在 adb 上的 sql select 语句

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

我想要一个批处理文件,通过 adb 运行 select 语句并返回找到的行。 这是我在批处理文件中使用的命令:

adb shell "su -c sqlite3 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db 'select * from sms;'"

我遇到的问题是,我的命令产生错误:

Error: incomplete input

我不明白的是休闲命令工作得很好:

adb shell "su -c sqlite3 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db '.tables'"

这将按预期返回数据库中的表。

我的猜测是,我需要转义一些字符,“;”也许吧,但是用 \ 或 ^ 转义它都不起作用。

任何帮助将不胜感激。

sqlite batch-file adb
2个回答
0
投票

我猜你正在使用powershell,然后逃脱

;

adb shell "su -c sqlite3 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db 'select * from sms`;'"

0
投票

正确的答案是使用

`"`"
来编码
"

adb shell "su -c 'sqlite3 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db `"`"SELECT * FROM sms;`"`"'"

我是通过 chatGPT 才知道的。

另一种方法是使用

`\`"
。这更有意义。你用adb端的
"
转义
\
,然后你在powershell端用反引号转义这两个字符。

adb shell "su -c 'sqlite3 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db `\`"SELECT * FROM sms;`\`"'"

如果有人想失去理智,还可以在 select 语句中添加一个 where 子句:

adb shell "su -c 'sqlite3 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db `\`"SELECT body FROM sms WHERE address=`\`\`\`"+41798072042`\`\`\`";`\`"'"

工作起来很有魅力。

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