前言
使用 Tasker 的您是否曾想过这些需求却无法实现:读取或删除指定联系人的所有短信记录;将当前最新的图片或视频分享出去;或者是更高级的:创建自己的数据库以用于数据的存储与查询?如果您是苦于无法实现的那位,那么当阅读过本文后,将令您不再纠结;如果您是早已实现的那位,那么本文也值得您阅读,因为当中有些内容或许对您有所启发。本文并不打算讲授 SQL 的知识(初学者若想学习 SQL,不妨从这本书开始),而是直接说明如何在 Tasker 上操作 SQLite 数据库。本文所有的数据库操作示例都是基于 Android 的短信系统数据库(已将其拷贝至 /sdcard/Download/mmssms.db
),接下来首先要介绍的是最常用的数据库操作 ── 查询。
查询操作
要查询的内容是:最近三条联通发送的内容包含「验证码」的短信记录(只需要短信的接收时间、发送方和内容)。
下图是从数据库管理工具 SqlitePrime 中得到的 sms 表结构,可帮助大家理解后续出现的 SQL 语句。
以下为满足上述查询要求的 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
原创内容,转载请注明出处