如何在 Tasker 上操作 SQLite 数据库

前言

使用 Tasker 的您是否曾想过这些需求却无法实现:读取或删除指定联系人的所有短信记录;将当前最新的图片或视频分享出去;或者是更高级的:创建自己的数据库以用于数据的存储与查询?如果您是苦于无法实现的那位,那么当阅读过本文后,将令您不再纠结;如果您是早已实现的那位,那么本文也值得您阅读,因为当中有些内容或许对您有所启发。本文并不打算讲授 SQL 的知识(初学者若想学习 SQL,不妨从这本书开始),而是直接说明如何在 Tasker 上操作 SQLite 数据库。本文所有的数据库操作示例都是基于 Android 的短信系统数据库(已将其拷贝至 /sdcard/Download/mmssms.db),接下来首先要介绍的是最常用的数据库操作 ── 查询。

查询操作

要查询的内容是:最近三条联通发送的内容包含「验证码」的短信记录(只需要短信的接收时间、发送方和内容)

下图是从数据库管理工具 SqlitePrime 中得到的 sms 表结构,可帮助大家理解后续出现的 SQL 语句。

sms 表

以下为满足上述查询要求的 SQL 语句(其中的 date、address 与 body 分别是短信的接收时间、发送方以及内容):

SELECT date, address, body
FROM sms
WHERE address = 10010 AND body LIKE '%验证码%'
ORDER BY date DESC LIMIT 3

在 SqlitePrime 中执行该 SQL 语句后可查询出满足要求的结果,见下图:

那么该如何从 Tasker 中获得相同的查询结果呢?接下来,将分别使用 Tasker 内置动作「SQL Query(SQL 查询)」中的三种模式来实现这需求。

  • 原始模式(Raw)

    文件(File):指定的数据库文件。若路径以 / 开头,则表示为绝对路径,否则为根目录是 sdcard 的相对路径。
    查询(Query):完整的 SQL 语句。其中的筛选条件(Where 指令)可设置 ? 占位符。
    筛选参数(Selection Parameters):用于设置筛选条件 ? 占位符的具体内容,需按照占位符的出现顺序来设置。
    输出列分隔符(Output Column Divider):可自定义结果集中每一行的各列之间的分隔符,若未设置,则默认以「,」(逗号)进行分隔。
    数组变量(Variable Array):查询出来的结果会以每个索引一行的方式存储在指定的数组中。

  • Formatted 模式(Formatted)

    (Table):要查询的表
    (Columns):要查询的字段
    筛选(Selection):筛选条件
    排序(Order By):排序内容

    注:文件以及筛选参数项与「原始模式」相同

  • URI 模式(URI Formatted)

    URI:由 URI 指定的特定的,而非数据库。上图中的 content://sms/inbox 等价于「Formatted 模式」 File + Table 的内容,即 mmssms.db 的 sms 表。

    注:其余项与「Formatted 模式」相同

说明:

  • 以上三种模式都可以查询出相同的结果,只是构建的方式有所不同。虽说三种模式,但其基本可归为两大类型,即文件URI。「原始模式」和「Formatted 模式」都属于文件类型,而「URI 模式」属于 URI 类型
  • 「原始模式」和「Formatted 模式」都是对数据库文件进行查询,只是「Formatted 模式」是将「原始模式」中完整的 SQL 语句格式化为多个参数项,这样可省去一些 SQL 指令,如 SELECT、WHERE 与 ORDER BY。这二者模式可互相转换
  • 文件类型的模式也可对系统数据库文件进行查询,但需要设备处于已 Root 状态,使用时还需要勾选「使用 Root」选项
  • 「URI 模式」可对指定的表进行查询,无需 Root 便可对某些系统数据库进行查询,如短信数据库、图片(视频)数据库等

其他数据库操作

「SQL 查询」动作除了可以查询数据外,还可以对数据库进行以下的写入操作(只能在「原始模式」中使用):

  • 插入数据:INSERT INTO
  • 更新数据:UPDATE
  • 删除数据:DELETE FROM
  • 创建表:CREATE TABLE
  • 更新表:ALTER TABLE

下图的 SQL 语句将会删除所有联通发送的短信记录:

注:目前「SQL 查询」动作无法直接删除表,若要实现这操作,可参看这文章中的删除表部分。

进阶操作

上面涉及的是已经存在的数据库,那么我想创建属于自己的数据库,并对其进行数据的存储与读取,可以实现吗?当然可以,您若想了解这部份操作,请参看这文章

实际应用

简单列举一些可通过数据库实现的功能:

  • 查询最新的图片(视频)
  • 删除特定的短信记录
  • 存储剪贴板记录(进阶操作)
  • 可将那些不想存储到系统通讯录的联系人,改为存储到自建数据库中(进阶操作)
  • ...

更新日志

  • 10/5/2018
    - 发布

其他

作者:sung
邮箱:sdfsung@gmail.com

原创内容,转载请注明出处

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342