Android資料庫高手祕籍(一):SQLite命令

發表於2014-09-17

要想熟練地操作任何一個資料庫,最最基本的要求就是要懂SQL語言,這也是每個程式設計師都應該掌握的技能。雖說SQL博大精深,要想精通確實很難,但最基本的一些建表命令,增刪改查,大家還是必須要學會的。

SQL(Structured Query Language)是一種標準的資料庫查詢語言,即所有的關係型資料庫都會支援它,只不過每種資料庫對SQL語言的支援與標準存在著細微的不同。我們無須關心其它資料庫對SQL語言的支援情況,這裡我們只要把重點放在SQLite上就可以了。下面我將使用模擬器來對SQLite支援的各種命令進行演示,如果你想用手機的話也可以,但要確保你的手機已經Root,並且包含sqlite3這個命令檔案。

首先確保模擬器已經連線上了電腦,然後在命令列輸入adb shell進入控制檯,如下圖所示:

注意#符號表示我們當前已經是超級使用者了,如果顯示的是$符號,表示當前只是普通使用者而已,這時還需要輸入su命令切換一下使用者身份才行。

有了超級使用者許可權之後,我們能做的事情就很多了,這裡我們先檢視一下系統自帶的聯絡人表吧。進入到/data/data目錄下,如下圖所示:

所有應用程式的本地儲存檔案都是存放在這個目錄下面的。為了要讓不同應用程式之間的資料容易區別開來,Android是使用應用程式包名進行分開管理,也就是說每個應用程式的本地儲存檔案都會存放在自己應用程式包名的那個目錄下,這裡我們ls一下看看有多少子目錄:

OK,確實有很多,畢竟手機上所有的應用程式都在這裡。其中,com.android.providers.contacts中存放的就是聯絡人的相關資料,我們進入到這個目錄再ls一下:

可以看到,目前有databases、files、lib和shared_prefs這幾個子目錄。其中databases肯定是用於存放資料庫檔案的,files是用於存放普通文字檔案的,lib是用於存放so庫的,shared_prefs則是用於存放shared檔案的。這是Android資料持久化的幾種可選方式,對這部分內容不太瞭解的朋友可以參考《第一行程式碼——Android》的第六章。

接著進入到databases目錄中,再ls:

其中字尾名為journal的檔案是日誌檔案,我們不用管,contacts2.db和profile.db才是真正的資料庫檔案,可以使用sqlite3命令來開啟資料庫,如下圖所示:

好的,資料庫已經開啟了,那麼我們怎麼才能知道當前資料庫中有哪些表呢?很簡單,.table命令就可以做到了:

哇,竟然有這麼多張表!是的,聯絡人的資料結構非常複雜,很多的資料都是分表儲存的。這裡我們隨便挑一張表,比如說accounts表,如果我想知道這張表中有哪些列應該怎麼辦呢?在MySQL中可以使用desc accounts這個命令,但SQLite卻不認識這個命令,畢竟它們是有差異化的。SQLite中可以使用pragma table_info(TABLE_NAME)這個命令來檢視錶的資料結構,如下圖所示:

可以看到,一共顯示了三條結果,表示accounts表中共有三列。但是,所有的欄位都縮在了一行裡面,並用“|”符號分隔,這樣我們很難看出每個欄位的含義。很簡單,只需要換一種顯示模式就行了,比如說line模式就挺不錯的。輸入.mode line命令切換顯示模式,然後重新執行pragma命令,結果如下圖所示:

怎麼樣,這樣就清晰多了吧?這三列的列名分別是account_name、account_type和data_set,資料型別都是TEXT(字串),允許為空,並且都不是主鍵。好,那我現在想查一查accounts表中的資料呢?這就太簡單了,使用select語句就可以了,如下所示:

恩?怎麼只有一條空資料啊。貌似模擬器上預設就是這樣的,如果你用的是手機的話,這裡應該就可以查到真正的資料了。不過沒關係,我們可以在設定裡面手動新增一個郵箱賬戶,如下圖所示:

現在再來重新查詢一遍accounts表,如下所示:

OK,新增的新賬戶已經成功查出來了。

除了查詢命令之外,還有其它的增刪改命令都和標準的SQL語法是相同的,即insert、delete和update,由於比較簡單,我就不再贅述了。比較值得一提的是,每個SQLite資料庫中都還有一個隱藏的sqlite_master表,這裡記載了當前資料庫中所有表的建表語句,可以使用select * from sqlite_master命令進行檢視:

結果太多了是不是?一屏根本就顯示不下嘛。不要著急,別忘了我們使用的是select命令,可以使用where語句來過濾出我們想要查詢的那部分內容,如下圖所示:

OK,CREATE TABLE accounts (account_name TEXT, account_type TEXT, data_set TEXT) 這就是accounts表的建表語句了,通過這種方式我們可以查詢到任意一張表的建表語句,從而對我們學習和分析資料庫表結構有所幫助。

有些朋友可能會覺得,每次都要輸入select命令來查詢表中的資料太麻煩了。沒錯,而且還要保證手機是連線在電腦上的時候才能查詢,確實太不方便。幸運的是,有些手機軟體已經提供了資料庫表查詢的功能,使得我們隨時隨地都可以方便地檢視資料庫中的資料,比如Root Explorer這款軟體就不錯。

仍然是確保你的手機已經Root,然後安裝Root Explorer,開啟軟體之後按照我們前面介紹的路徑,進入/data/data/com.android.providers.contacts/databases,點選contacts2.db資料庫,選擇內建資料庫檢視器,然後隨便點選一張表就可以檢視到裡面的資料了,如下圖所示:

使用這種方法,我們可以隨時檢視資料庫表中的最新資料,直觀又方便,在程式開發的時候可以起到非常大的幫助。

好了,今天的講解就到這裡,下篇文章當中我將帶領大家探究Android資料庫中更多的奧祕。感興趣的朋友請繼續閱讀 Android資料庫高手祕籍(二)——建立表和LitePal的基本用法 。

相關文章