前言
使用 Tasker 的您是否曾想過這些需求卻無法實(shí)現(xiàn):讀取或刪除指定聯(lián)系人的所有短信記錄逗余;將當(dāng)前最新的圖片或視頻分享出去;或者是更高級的:創(chuàng)建自己的數(shù)據(jù)庫以用于數(shù)據(jù)的存儲與查詢坯钦?如果您是苦于無法實(shí)現(xiàn)的那位揩懒,那么當(dāng)閱讀過本文后,將令您不再糾結(jié);如果您是早已實(shí)現(xiàn)的那位拦赠,那么本文也值得您閱讀,因?yàn)楫?dāng)中有些內(nèi)容或許對您有所啟發(fā)葵姥。本文并不打算講授 SQL 的知識(初學(xué)者若想學(xué)習(xí) SQL荷鼠,不妨從這本書開始),而是直接說明如何在 Tasker 上操作 SQLite 數(shù)據(jù)庫榔幸。本文所有的數(shù)據(jù)庫操作示例都是基于 Android 的短信系統(tǒng)數(shù)據(jù)庫(已將其拷貝至 /sdcard/Download/mmssms.db
)允乐,接下來首先要介紹的是最常用的數(shù)據(jù)庫操作 ── 查詢。
查詢操作
要查詢的內(nèi)容是:最近三條聯(lián)通發(fā)送的內(nèi)容包含「驗(yàn)證碼」的短信記錄(只需要短信的接收時(shí)間削咆、發(fā)送方和內(nèi)容)牍疏。
下圖是從數(shù)據(jù)庫管理工具 SqlitePrime 中得到的 sms 表結(jié)構(gòu),可幫助大家理解后續(xù)出現(xiàn)的 SQL 語句拨齐。
以下為滿足上述查詢要求的 SQL 語句(其中的 date鳞陨、address 與 body 分別是短信的接收時(shí)間、發(fā)送方以及內(nèi)容):
SELECT date, address, body
FROM sms
WHERE address = 10010 AND body LIKE '%驗(yàn)證碼%'
ORDER BY date DESC LIMIT 3
在 SqlitePrime 中執(zhí)行該 SQL 語句后可查詢出滿足要求的結(jié)果瞻惋,見下圖:
那么該如何從 Tasker 中獲得相同的查詢結(jié)果呢厦滤?接下來,將分別使用 Tasker 內(nèi)置動作「SQL Query(SQL 查詢)」中的三種模式來實(shí)現(xiàn)這需求歼狼。
-
原始模式(Raw)
文件(File):指定的數(shù)據(jù)庫文件掏导。若路徑以
/
開頭,則表示為絕對路徑羽峰,否則為根目錄是 sdcard 的相對路徑趟咆。
查詢(Query):完整的 SQL 語句。其中的篩選條件(Where 指令)可設(shè)置?
占位符梅屉。
篩選參數(shù)(Selection Parameters):用于設(shè)置篩選條件?
占位符的具體內(nèi)容值纱,需按照占位符的出現(xiàn)順序來設(shè)置。
輸出列分隔符(Output Column Divider):可自定義結(jié)果集中每一行的各列之間的分隔符履植,若未設(shè)置计雌,則默認(rèn)以「,」(逗號)進(jìn)行分隔。
數(shù)組變量(Variable Array):查詢出來的結(jié)果會以每個(gè)索引一行的方式存儲在指定的數(shù)組中玫霎。
-
Formatted 模式(Formatted)
表(Table):要查詢的表
列(Columns):要查詢的字段
篩選(Selection):篩選條件
排序(Order By):排序內(nèi)容注:文件以及篩選參數(shù)項(xiàng)與「原始模式」相同
-
URI 模式(URI Formatted)
URI:由 URI 指定的特定的表凿滤,而非數(shù)據(jù)庫。上圖中的
content://sms/inbox
等價(jià)于「Formatted 模式」 File + Table 的內(nèi)容庶近,即 mmssms.db 的 sms 表翁脆。注:其余項(xiàng)與「Formatted 模式」相同
說明:
- 以上三種模式都可以查詢出相同的結(jié)果,只是構(gòu)建的方式有所不同鼻种。雖說三種模式反番,但其基本可歸為兩大類型,即文件與 URI“崭祝「原始模式」和「Formatted 模式」都屬于文件類型篙贸,而「URI 模式」屬于 URI 類型
- 「原始模式」和「Formatted 模式」都是對數(shù)據(jù)庫文件進(jìn)行查詢,只是「Formatted 模式」是將「原始模式」中完整的 SQL 語句格式化為多個(gè)參數(shù)項(xiàng)枫疆,這樣可省去一些 SQL 指令爵川,如 SELECT、WHERE 與 ORDER BY息楔。這二者模式可互相轉(zhuǎn)換
- 文件類型的模式也可對系統(tǒng)數(shù)據(jù)庫文件進(jìn)行查詢寝贡,但需要設(shè)備處于已 Root 狀態(tài),使用時(shí)還需要勾選「使用 Root」選項(xiàng)
- 「URI 模式」可對指定的表進(jìn)行查詢值依,無需 Root 便可對某些系統(tǒng)數(shù)據(jù)庫進(jìn)行查詢圃泡,如短信數(shù)據(jù)庫、圖片(視頻)數(shù)據(jù)庫等
其他數(shù)據(jù)庫操作
「SQL 查詢」動作除了可以查詢數(shù)據(jù)外愿险,還可以對數(shù)據(jù)庫進(jìn)行以下的寫入操作(只能在「原始模式」中使用):
- 插入數(shù)據(jù):INSERT INTO
- 更新數(shù)據(jù):UPDATE
- 刪除數(shù)據(jù):DELETE FROM
- 創(chuàng)建表:CREATE TABLE
- 更新表:ALTER TABLE
下圖的 SQL 語句將會刪除所有聯(lián)通發(fā)送的短信記錄:
注:目前「SQL 查詢」動作無法直接刪除表颇蜡,若要實(shí)現(xiàn)這操作,可參看這文章中的刪除表部分拯啦。
進(jìn)階操作
上面涉及的是已經(jīng)存在的數(shù)據(jù)庫澡匪,那么我想創(chuàng)建屬于自己的數(shù)據(jù)庫,并對其進(jìn)行數(shù)據(jù)的存儲與讀取褒链,可以實(shí)現(xiàn)嗎?當(dāng)然可以疑苔,您若想了解這部份操作甫匹,請參看這文章。
實(shí)際應(yīng)用
簡單列舉一些可通過數(shù)據(jù)庫實(shí)現(xiàn)的功能:
- 查詢最新的圖片(視頻)
- 刪除特定的短信記錄
- 存儲剪貼板記錄(進(jìn)階操作)
- 可將那些不想存儲到系統(tǒng)通訊錄的聯(lián)系人惦费,改為存儲到自建數(shù)據(jù)庫中(進(jìn)階操作)
- ...
更新日志
- 10/5/2018
- 發(fā)布
其他
作者:sung
郵箱:sdfsung@gmail.com
原創(chuàng)內(nèi)容兵迅,轉(zhuǎn)載請注明出處