Android中的數(shù)據(jù)存儲
- Context類為我們提供了一個OpenFileOutput()可以用將數(shù)據(jù)存儲到指定的文件中。第一個參數(shù)是文件名,第二個參數(shù)是模式:MODE_PRIVATE和MODE_APPEND
- Context還提供了OpenFileInput()進(jìn)行讀取bufferedReader.readLine()!=null時一直讀
SharedPreference存儲
該文件都是存放在包下
- 獲取該對象
1.Context類中 getSharedPreference();第一個參數(shù)指定文件名稱。第二個參數(shù)模式:MODE_PRIVAT(只有當(dāng)前應(yīng)用程序才可以進(jìn)行讀寫)和MODE_MULTI_PROCESS(多線程)
- Activity類getPreference()。
- Preference類中的靜態(tài)方法getDefaultSharedPreferences()
- 得到對象之后,就可以開始向SharedPreference文件中存儲數(shù)據(jù)
- 先獲取Editor對象。edit();
- 添加數(shù)據(jù)putString()
- 提交數(shù)據(jù)commit(); (清除數(shù)據(jù)可以調(diào)用clear())
讀取數(shù)據(jù)更簡單,只需要SharedPreference.getXXX()就行。參數(shù)第一個是鍵第二個是默認(rèn)值
SQLite數(shù)據(jù)庫存儲
創(chuàng)建數(shù)據(jù)庫
首先我們需要了解的SQliteOpenHelper幫助類。它是個抽象類所以我們必須自定義一個類繼承他。實現(xiàn)兩個方法和構(gòu)造器。
在調(diào)用gerReadableDatabase()或getWritableDatabase()創(chuàng)建數(shù)據(jù)庫(如果數(shù)據(jù)庫已存在則直接打開),并且返回一個可對數(shù)據(jù)庫進(jìn)行讀寫操作的對象。
gerReadableDatabase()使用這個方法時,若數(shù)據(jù)庫不可寫入(如磁盤空間已滿)返回的對象以只讀方式去打開數(shù)據(jù)庫
getWritableDatabase()方法碰到上面情況則會拋出異常
-
SQliteOpenHelper中的兩個構(gòu)造方法,我們一般實現(xiàn)參數(shù)少的那個。
- 第一個是Context,
- 第二個參數(shù)是數(shù)據(jù)庫名字,創(chuàng)建數(shù)據(jù)庫時使用的就是這里指定的名稱
- 第三個參數(shù)允許我們在查詢數(shù)據(jù)的時候返回一個自定義的Cursor,一般是null
- 第四個參數(shù)是版本號用于升級
/data/data/<package name>/databases/目錄下。數(shù)據(jù)庫創(chuàng)建成功了后我們可以在cmd中使用如下命令:
- adb shell
- cd /data/data/<package name>/databases/
- ls我們可以查看到有兩個一個是我們創(chuàng)建的,另一個是XXX.db-journal是為了讓數(shù)據(jù)庫能支持事務(wù)而產(chǎn)生的臨時日志文件,大小為0kb.
- sqlite3 后面加數(shù)據(jù)庫的名字即可(借助sqlite來打開數(shù)據(jù)庫)
- .table(查看表) .schema(查看建表語句)
添加數(shù)據(jù)
我們先獲取SQLiteDatabase對象
然后使用ContentValues來對要添加的數(shù)據(jù)進(jìn)行組裝。
-
接下來調(diào)用insert()方法將數(shù)據(jù)添加到表中。插入多條必須用完ContentValues對象之后clear();
db.insert("Book",null,contentvalues);
更新數(shù)據(jù)調(diào)用的是update();
db.update("Book",values,"name=?",new String []{"The Davinci Code"});
-
刪除數(shù)據(jù)
db.delete("Book","pages>?",new String[]{"500"});
-
查詢數(shù)據(jù)
Cursor cursor=db.query("Book",null,null,null,null,null,null); 遍歷cursor while(cusor.moveToNext()){ ....}