安卓小白開發之學習安卓的點點滴滴—數據庫(3)

1, 真正的數據庫儲存——SQLite數據庫

概述:這是安卓推出的,用於移動端的,輕量級數據庫,用於處理那些數據量大,結構複雜的數據,它比一般的數據庫要簡單的多,甚至不需要設置賬號和密碼,並且運行速度非常快,佔用資源也極少(通常幾百k即可)

可以使用標準的SQL語句控制,還遵循了數據庫的ACID事物,所以以前使用過數據庫的盆友,基本上可以簡略的掃過本文章。

 

首先這個SQL數據庫在安卓的包中以SQLiteDatabase類封裝。 

要使用這個類,需要用SQLiteOpenHelper抽象類封裝(這是一個幫助類),其中要重寫一些方法。

 

方法&屬性介紹:

onCreate()方法:

定義類:SQLiteDatabase

特性:非靜態方法,用於創建數據庫

參數:SQLiteDatabase對象

返回值:無

 

onUpdate()方法:

定義類:SQLiteDatabase

特性:非靜態方法,用於更新數據庫

參數:SQLiteDatabase,數據庫老的版本(int類型),新數據庫類型

返回值:無

 

SQLiteDataBaseHelper的構造方法(參數較少的那個即可):

定義類:SQLiteDataBaseHelper

特性:用於進行數據庫的一系列操作的前提

參數:Context,庫名(數據庫名String類型),返回自定義的Cursor(光標)<一般傳入null即可>,int類型的當前數據庫版本號。

返回值:無

 

getReadableDatabase()方法:

定義類:SQLiteDataBaseHelper

特性:非靜態,用於創建或打開數據庫,並返回一個可供讀的操作的對象。

參數:無

返回值:SQLiteDataBase對象

 

getWritableDatabase()方法:

定義類:SQLiteDataBaseHelper

特性:非靜態,用於創建或打開數據庫,並返回一個可供寫的操作的對象。

參數:無

返回值:SQLiteDataBase對象

 

注意:

1, SQLiteDatabase對象的創建,一般調用的是DataBaseHelper子類的構造方法,而並非直接調用SQLiteDataBase的構造方法,當系統查詢無當前數據庫名時,會在系統中創建相應的數據庫。

2, SQLiteDataBase對象的升級,只要再次調用其構造方法,將最後一個參數傳入比之前第一次調用的值大的一個數字即可,這樣就可以調用onUpdate()方法。

3, 這裏onUpdate()方法,和onCreate()方法的調用都是有條件的,不能直接調用。

 

數據庫最重要的方法(CRDU,增刪更查):

與SQL數據庫不同,這裏安卓有一系列的數據調用新方法,也可以直接用SQL數據庫的習慣,調用。

 

 

Put()方法:

定義類:ContentValues

特性:非靜態方法,用於構造ContentValues對象所攜帶的數據

參數:鍵值對,鍵爲String類型,值無要求。

返回值:無

 

Clear()方法:

定義類:ContentValues

特性:非靜態方法,用於清除ContentValues對象所攜帶的數據

 

Insert()方法:

定義類:SQLiteDatabase

特性:非靜態方法,用於插入數據

參數:String類型的數據類別(自定義類別,如Book等),未指定添加數據的情況下給某些可爲空白的列表自動賦值爲NULL(一般只要傳null,即可),ContentValues對象(用於一次性,將一類對象的所有參數傳入)。

返回值:無

 

Update()方法:

定義類:SQLiteDatabase

特性:非靜態方法,用於更新

參數:表名(String類型),ContentValues對象,三參、四參用於約束更新對象的行列中的數據。(也可理解爲佔位和值的關係)(如:“price=?”,3.88))(不指定則自動更新所有行)

返回值:無

 

delet()方法:

定義類:SQLiteDatabase

特性:非靜態方法,用於刪除

參數:表名(String類型),二參,三參與上述相類似也是回答:where,what兩個問題的。(不指定則刪除所有行)

返回值:無

 

query()方法

定義類:SQLiteDatabase

特性:非靜態方法,用於查詢數據,返回一個Cursor對象用於獲取數據

參數(只介紹最簡單的):表名,三參,四餐用於指定查詢的行位置,和查詢幾行,如果不指定則查詢所有,五參用於指定需要group by的列,不指定則不對其進行group by操作。

六參用於對group by之後的數據進行進一步過濾,不指定則不過濾,七參用於指定查詢結果的排列方式,不指定則默認方式排列。

返回值:Cursor類型對象(光標)

 

Cursor是一個抽象類(在android.database中)其中包含了許多方法用於得到返回的數據

 

moveToFirst()方法:

定義類:Cursor

特性:非靜態方法,用於將光標移動到第一個位置

參數:無

返回值:boolean類型,表示該操作是否實現

 

getClumIndex()方法:

定義類:Cursor

特性:非靜態方法,用於讀取相應鍵後面的值

參數:行的名稱(之前存放時用的“鍵”)

返回值:int類型的值

 

getXXX()方法:

定義類:Cursor

特性:類似SharedPreferences中的方法,取出相應的數據類型。

參數:int類型的ClumIndex,參數的值(所要參數的值一般嵌套getClumIdex())

返回值:XXX數據類型

 

close()方法:

定義類:Cursor

特性:非靜態方法,用於關閉光標讀取的文件

參數:無

返回值:無

 

也可以通過SQL直接操作數據庫:

 

通過execSQL()方法實現,這裏屬於SQL的知識,不過多涉及。

但必須有所瞭解,因爲至少要使用這條語句先建立一個表格,才能使用上述方法進行增刪改查。

 

 

查看數據庫內容方法操作:

這裏由於博主,用的是windows操作系統,暫且先介紹windows下數據庫的查看方法。

此時該數據庫,終於不能在FileExplorer視圖下查看了。此時要用到的是SDK中的一個調試工具。

存放在platform-tools下,若想用命令提示符打開該工具,要將該工具的路徑配置到環境變量中。

然後即可使用這款工具:adb shell

在命令提示符中寫:adb shell即可打開


由於該軟件由一位編安卓底層工程師設計,也就是基於Linux的,Linux中的代碼習慣,在該軟件中得以體現,例如:使用cd而非cd/d轉到某某目錄下。

轉到data->data->包-project名->databases(提示:在不知道接下來目錄是什麼的時候,可以使用ls這個linux中常見的命令)


然後用sqlite3 <數據庫名>打開數據庫

.table 命令看到表格(其中android_metadata是自動生成的表格<一定存在>)

然後使用.schema可以看到建表語句(其中的邏輯關係,和類型)

建表之後

可以使用select*from <表名>進行查看內容了


 

如此可以簡單進行數據的長久儲存了。


案例:

實現創建數據庫,並向其中傳入數據,由於案例較簡單,在此不進行贅述。

看圖:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章