You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批处理执行adb+SQLite SELECT语句报错「Error: incomplete input」求助

解决批处理中adb执行sqlite3 SELECT语句报错的问题

问题根源

你遇到的Error: incomplete input是因为Windows批处理的命令解析规则,以及多层shell(adb shell → su → sqlite3)对特殊字符(分号;)的处理冲突:

  • 批处理会把分号当作命令分隔符,提前截断了sqlite3的查询语句
  • 多层引号嵌套的解析错误,导致sqlite3没有收到完整的SELECT命令

而.tables能正常运行,是因为这个sqlite3内置命令不需要分号也能执行,且没有触发批处理的特殊字符解析问题。

解决方案

方法1:调整引号嵌套并转义分号

在批处理中,用双引号嵌套(两个双引号表示一个双引号),同时用^转义分号,避免被批处理截断:

adb shell "su -c ""sqlite3 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db 'select * from sms^;'"""
  • 外层双引号包裹adb shell的整个命令
  • 用""表示su命令内部的双引号
  • 分号前加^,让批处理把它当作普通字符传递给sqlite3

方法2:使用临时SQL文件(更可靠)

如果转义还是有问题,推荐把查询语句写入临时文件,再推送到设备执行:

  1. 创建query.sql文件,内容为:
select * from sms;
  1. 执行批处理命令:
:: 推送SQL文件到设备
adb push query.sql /data/local/tmp/
:: 执行sqlite3读取文件内容
adb shell "su -c ""sqlite3 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db < /data/local/tmp/query.sql"""
:: 删除临时文件
adb shell "rm /data/local/tmp/query.sql"

这种方法彻底避免了命令行的特殊字符解析问题,稳定性更高。

内容的提问来源于stack exchange,提问作者Dario Viva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:45:59