1、前言
SQLite數(shù)據(jù)庫(kù)系統(tǒng)特點(diǎn)
輕型,嵌入式,ACID關(guān)系型數(shù)據(jù)庫(kù)
SQLite優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):
輕量、高效
綠色無(wú)需“安裝”
零配置
動(dòng)態(tài)數(shù)據(jù)類型
- 缺點(diǎn):
并發(fā)性能
網(wǎng)絡(luò)文件支持弱
僅支持SQL功能子集,有很多高級(jí)的功能不支持
Android平臺(tái)上的Sqlite數(shù)據(jù)庫(kù)用途
APP運(yùn)行數(shù)據(jù)的保存,如參數(shù)等
離線功能
數(shù)據(jù)處理
Android平臺(tái)SQLite使用
- 具體使用兩個(gè)類
- SQLiteDatabase類:封裝了管理數(shù)據(jù)庫(kù)的各種方法,如insert、delete、update、query
- SQLiteOpenHelper類:封裝了數(shù)據(jù)庫(kù)創(chuàng)建和版本管理
2、SQLite命令
(本節(jié)摘抄自: Android數(shù)據(jù)庫(kù)高手秘籍(一)——SQLite命令,強(qiáng)烈建議進(jìn)入原博客查看學(xué)習(xí))
首先確保模擬器已近連接上了電腦
-
命令行輸入 adb shell 進(jìn)入控制臺(tái),如下圖所示:
adb shell
注意:#符號(hào)表示我們當(dāng)前已經(jīng)是超級(jí)用戶了,如果顯示$符號(hào),表示當(dāng)前只是普通用戶而已,這時(shí)還需輸入su命令切換一下用戶身份才行。
- 有了超級(jí)用戶權(quán)限之后,就可以做很多事情了,如:查看一下系統(tǒng)自帶的聯(lián)系人表
- 通過(guò)命令行 cd data/data 進(jìn)入到 /data/data目錄下,如下圖所示:
cd data/data
所有應(yīng)用程序的本地存儲(chǔ)文件都是存放在這個(gè)目錄下面的。
- 為了要讓不同應(yīng)用程序之間的數(shù)據(jù)容易區(qū)別開(kāi)來(lái),Android是使用應(yīng)用程序包名進(jìn)行分開(kāi)管理,也就是說(shuō)每個(gè)應(yīng)用程序的本地存儲(chǔ)文件都會(huì)存放在自己應(yīng)用程序包名的那個(gè)目錄下,
- 這里我們通過(guò)命令行 ls 一下看看有多少子目錄:
ls
子目錄有很多,手機(jī)上所有應(yīng)用程序都在這里,其中 com.android.providers.contacts就是存放聯(lián)系人的相關(guān)數(shù)據(jù)
- 通過(guò)命令行 cd 包名 和 ls 進(jìn)入查看該包下的目錄:
cd 具體包名+ls
可以看到,目前有databases、files、lib和shared_prefs這幾個(gè)子目錄。其中databases肯定是用于存放數(shù)據(jù)庫(kù)文件的,files是用于存放普通文本文件的,lib是用于存放so庫(kù)的,shared_prefs則是用于存放shared文件的,這是Android數(shù)據(jù)持久化的幾種可選方式。
- 接著進(jìn)入到databases目錄中,再 ls:
cd databases + ls
其中后綴名為journal的文件是日志文件,我們不用管,contacts2.db和profile.db才是真正的數(shù)據(jù)庫(kù)文件
-
使用sqlite3命令 sqlite3 數(shù)據(jù)庫(kù)文件全名 來(lái)打開(kāi)數(shù)據(jù)庫(kù),如下圖所示:
sqlite3 數(shù)據(jù)庫(kù)文件名 好的,數(shù)據(jù)庫(kù)已經(jīng)打開(kāi)了,那么我們?cè)趺床拍苤喇?dāng)前數(shù)據(jù)庫(kù)中有哪些表呢?
-
輸入命令行 .table 就可以查看當(dāng)前數(shù)據(jù)庫(kù)中的表:
**.table** 這里有這么多張表?是的,聯(lián)系人的數(shù)據(jù)結(jié)構(gòu)非常復(fù)雜,很多的數(shù)據(jù)都是分表存儲(chǔ)的。這里我們隨便挑一張表,比如說(shuō)accounts表,如果我想知道這張表中有哪些列應(yīng)該怎么辦呢?在MySQL中可以使用desc accounts這個(gè)命令,但SQLite卻不認(rèn)識(shí)這個(gè)命令,畢竟它們是有差異化的。
-
SQLite中可以使用pragma table_info(TABLE_NAME);這個(gè)命令來(lái)查看表的數(shù)據(jù)結(jié)構(gòu),大致如下圖所示:
pragma table_info(表名) -
可以看到,一共顯示了三條結(jié)果,表示accounts表中共有三列。但是,所有的字段都縮在了一行里面,并用 “|” 符號(hào)分隔,這樣我們很難看出每個(gè)字段的含義。很簡(jiǎn)單,只需要換一種顯示模式就行了,比如說(shuō) line 模式就挺不錯(cuò)的。輸入 .mode line 命令切換顯示模式,然后重新運(yùn)行 pragma命令, 結(jié)果如下圖所示:
-
這樣就清晰多了吧?這三列的列名分別是account_name、account_type和data_set,數(shù)據(jù)類型都是TEXT(字符串),允許為空,并且都不是主鍵。好,那我現(xiàn)在想查一查accounts表中的數(shù)據(jù)呢?這就太簡(jiǎn)單了,使用 select語(yǔ)句 就可以了,如下所示:
-
貌似模擬器上默認(rèn)就只有一條空數(shù)據(jù),如果你用的是手機(jī)的話,這里應(yīng)該就可以查到真正的數(shù)據(jù)了。不過(guò)沒(méi)關(guān)系,我們可以在設(shè)置里面手動(dòng)添加一個(gè)郵箱賬戶,如下圖所示:
-
現(xiàn)在再來(lái)重新查詢一遍accounts表,如下所示:
20140901221137578.png -
除了查詢命令之外,還有其它的增刪改命令都和標(biāo)準(zhǔn)的SQL語(yǔ)法是相同的,即insert、delete和update,由于比較簡(jiǎn)單,不再贅述了。比較值得一提的是,每個(gè)SQLite數(shù)據(jù)庫(kù)中都還有一個(gè)隱藏的sqlite_master表,這里記載了當(dāng)前數(shù)據(jù)庫(kù)中所有表的建表語(yǔ)句,可以使用select * from sqlite_master命令進(jìn)行查看:
-
結(jié)果太多了是不是?一屏根本就顯示不下嘛。不要著急,別忘了我們使用的是select命令,可以使用where語(yǔ)句來(lái)過(guò)濾出我們想要查詢的那部分內(nèi)容,如下圖所示:
**CREATE TABLE accounts (account_name TEXT, account_type TEXT, data_set TEXT) **這就是accounts表的建表語(yǔ)句了,通過(guò)這種方式我們可以查詢到任意一張表的建表語(yǔ)句,從而對(duì)我們學(xué)習(xí)和分析數(shù)據(jù)庫(kù)表結(jié)構(gòu)有所幫助。
友情提示:
- 有些朋友可能會(huì)覺(jué)得,每次都要輸入select命令來(lái)查詢表中的數(shù)據(jù)太麻煩了。沒(méi)錯(cuò),而且還要保證手機(jī)是連接在電腦上的時(shí)候才能查詢,確實(shí)太不方便。幸運(yùn)的是,有些手機(jī)軟件已經(jīng)提供了數(shù)據(jù)庫(kù)表查詢的功能,使得我們隨時(shí)隨地都可以方便地查看數(shù)據(jù)庫(kù)中的數(shù)據(jù),比如Root Explorer這款軟件就不錯(cuò)。
-
仍然是確保你的手機(jī)已經(jīng)Root,然后安裝Root Explorer,打開(kāi)軟件之后按照我們前面介紹的路徑,進(jìn)入/data/data/com.android.providers.contacts/databases,點(diǎn)擊contacts2.db數(shù)據(jù)庫(kù),選擇內(nèi)置數(shù)據(jù)庫(kù)查看器,然后隨便點(diǎn)擊一張表就可以查看到里面的數(shù)據(jù)了,如下圖所示:
- 使用這種方法,我們可以隨時(shí)查看數(shù)據(jù)庫(kù)表中的最新數(shù)據(jù),直觀又方便,在程序開(kāi)發(fā)的時(shí)候可以起到非常大的幫助。














