如何在 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 上操作 SQLite 数据库_第1张图片

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

  • 原始模式(Raw)

    如何在 Tasker 上操作 SQLite 数据库_第2张图片

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

  • Formatted 模式(Formatted)

    如何在 Tasker 上操作 SQLite 数据库_第3张图片

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

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

  • URI 模式(URI Formatted)

    如何在 Tasker 上操作 SQLite 数据库_第4张图片

    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 语句将会删除所有联通发送的短信记录:

如何在 Tasker 上操作 SQLite 数据库_第5张图片

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

进阶操作

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

实际应用

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

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

更新日志

  • 10/5/2018
    - 发布

其他

作者:sung
邮箱:[email protected]

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

你可能感兴趣的:(如何在 Tasker 上操作 SQLite 数据库)