Android數(shù)據(jù)庫(kù)操作(一)——基本SQLite命令

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.dbprofile.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í)候可以起到非常大的幫助。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容