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 <表名>進行查看內容了
如此可以簡單進行數據的長久儲存了。
案例:
實現創建數據庫,並向其中傳入數據,由於案例較簡單,在此不進行贅述。
看圖: