大家好,我是3分鐘學堂的郭立員,今天繼續安卓按鍵的文章教程。
大家好,我是郭立員,今天給大家介紹一下本地非加密數據庫,這里有兩個關鍵詞:本地、非加密。
首先我們來了解一下什么是數據庫啊~
“是一個長期存儲在計算機內的、有組織的、可共享的、統一管理的大量數據的集合。”
上面是百度百科查的,簡單點理解就是存數據的表格。
數據庫文件的后綴名是.db
數據庫的組成部分:
一個數據庫包含:數據庫名,表名,列名,表數據
我以截圖為例:
數據庫名:my.db
表名:sms,一個數據庫可以有多張表
列名:有3列數據,data1,data2,data3,對于表的列是沒有上限的
表數據:一共1行3列,支持多行數據
如果你對辦公軟件比較熟悉的話,是不是覺得數據庫和Excel表格很像,可以把數據存入到表格當中。
了解完數據庫構成以后,我們對于數據庫基本要完成以下這么幾個操作:
①新建數據庫
②添加數據
③刪除數據
④讀取數據
⑤修改數據
對于到我們安卓按鍵插件的命令如下圖:
接下來是這篇文章的重點,就是在安卓按鍵里面怎么操作數據庫:
注:代碼區均可向右滑動查看完整代碼。
【一】新建數據庫
TracePrintsqlite3.SQLCreate(數據庫路徑,?表名,?列名)
新建完數據庫以后會得到一個不含數據只有表頭的空表:
舉個例子,在雷電模擬器的共享文件夾中新建一個名字叫my.db的數據庫,數據庫中有一個表叫sms,表中有3列,分別是data1,data2,data3
Import"sqlite3.lua"
TracePrint?sqlite3.SQLCreate("/sdcard/pictures/my.db","sms",?{"data1","data2","data3"})
當然你可以像命令介紹里面那樣把數據庫路徑、列名都單獨定義一個變量,這里為了讓大家看得明白,我就直接把參數寫進命令里面了。
【二】添加數據
建好數據庫就需要往里面放數據了,怎么操作呢?
這里用一個詞形容叫“對號入座”,你要把數據放到哪個數據庫,哪個表,哪一列?
TracePrintsqlite3.SQLInsert(數據庫名, 表名, {列名:內容})
還是截圖那個例子:
我們有三個數據,分別是"這是第1條新記錄","這是第2條新記錄","這是第3條新記錄"。
按照剛剛說的對號入座~
放到數據庫是"/sdcard/pictures/my.db"
放的表是?"sms"
放的列是,{"data1","data2","data3"}這三列。
TracePrint sqlite3.SQLInsert("/sdcard/pictures/my.db","sms",?{"data1":"這是第1條新記錄","data2":"這是第2條新記錄","data3":"這是第3條新記錄"})
這里需要注意一點,這個添加數據,是以追加的形式,就是在原有數據的下一行添加內容,而且是整行添加,沒有的數據添加的列空白。
【三】讀取數據
讀取數據也就是查詢數據庫sqlite3.SQLSelect ,這是一個有難度的命令,難點在于“查詢的過濾條件”這個參數,因為需要SQLite語法,不過好在它是一個可選填的參數,對于這類參數,我們初學時的態度就是可選填就是不填。
看一下命令介紹一共4個參數,去掉2個選填的,就剩2個了。
Dim ret=sqlite3.SQLSelect(數據庫路徑, 表名)
這里ret是用來存儲查詢結果的變量,它存儲內容的格式很關鍵,看命令介紹返回值是鍵值表,那具體什么格式的鍵值表呢,這里姑且賣個關子,下面用例子說明。
還是讀取剛剛新建的數據庫my.db中的sms表
Import"sqlite3.lua"
Dim ret = sqlite3.SQLSelect("/sdcard/pictures/my.db","sms")
Dim json=encode.TableToJson(ret)
TracePrint json
我把返回值用命令轉成了json格式,可以直接調試輸出,放入文本給大家截圖看一下。
這是一個二維鍵值表,也可以理解為二維數組,知道它的格式以后,稍微有點json提取經驗的朋友應該就知道怎么提取了。
對比這個表的截圖,可以看到返回值的格式,是按行存儲的,第一行3個內容存入到表的第一個內容,第二行存入到表的第二個內容,第三行存入到表的第三個內容。
比方說我想要提取,第2行的data3對應的數據,該怎么寫代碼?
Import "sqlite3.lua"
Dim ret = sqlite3.SQLSelect("/sdcard/pictures/my.db","sms")
TracePrint ret[2]["data3"]
看代碼找關系:
[2]代碼第2行
["data3"]代表列名叫data3的列
講完上面這些,還有2個命令“刪除數據庫記錄”和“修改數據庫內容”,這兩個就不講了,“刪除數據庫記錄”不講的原因是我不會SQLite語法,所以沒法講。“修改數據庫內容”和“添加數據”是差不多的,唯一不同點也是SQLite語法那個選填的參數,所以也是沒法講。
雖然我不講,但是如果你想深入學習數據庫,SQLite語法也是要去學的。
最后說一下我為啥寫這篇文章,昨天有朋友問我怎么讀取通訊錄的號碼,查了一下號碼存儲的位置,發現是一個數據庫,所以就研究了一下,才有了今天的文章。
通訊錄的數據路徑是
"/data/data/com.android.providers.contacts/databases/contacts2.db"
想研究的朋友可以自己試試看。