手动删除 Android 重复短信


本来一般备份恢复短信都应该判断重复的,不过 XT711 自带的备份恢复程序比较垃圾,恢复时直接导致重复,我打算自己动手丰衣足食

不过也还算比较简单,几个 sql 查找重复的语句就解决了

  1. 先做准备工作,什么下 adb 程序、root、开调试模式、下个 Navicat 之类的
  2. adb pull /data/data/com.android.providers.telephony/databases/mmssms.db d:\
    导出短信
  3. DELETE FROM sms WHERE "_id" NOT IN ( SELECT min("_id") FROM sms GROUP BY date, address, body )
    删除所有其它重复短信
  4. adb push d:\mmssms.db /data/data/com.android.providers.telephony/databases/mmssms.db
    再把短信数据库弄进去
  5. 用 chown 把 mmssms.db 的用户名和组改成和 com.android.providers.telephony 一样,否则很有可能手机会报错

还有几个其它查询,可以用来做加减法

  1. SELECT count(*) FROM sms
    查询所有短信数量
  2. SELECT min("_id") AS id, address, date, body, count(*) AS 记录数 FROM sms GROUP BY date, address, body ORDER BY id
    查找出所有唯一短信,右下角显示有多少条
  3. SELECT count(*) FROM sms WHERE "_id" IN( SELECT min("_id") FROM sms GROUP BY date, address, body HAVING count(*) = 2)
    查询重复了一次的短信有多少条,后面的数字直接改查询其它
  4. SELECT count(*) FROM sms WHERE date IN ( SELECT date FROM sms GROUP BY date, address, body HAVING count(*) =2 )
    查询重复一次的所有短信,一样的改数字查询其它
  5. UPDATE threads SET message_count=(SELECT count(*) FROM sms WHERE sms.thread_id=threads."_id")
    这句可以更新会话模式短信数量

sms 表保存了所有的短信,threads 表是会话模式用的


说两句

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据