




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
-1-了解Android系統(tǒng)中數(shù)據(jù)存儲(chǔ)的方式熟悉Preferences工作原理并會(huì)使用Preferences存儲(chǔ)數(shù)據(jù)熟悉文件存儲(chǔ)工作原理并會(huì)使用文件存儲(chǔ)數(shù)據(jù)熟悉SQLite工作原理并會(huì)使用SQLite存儲(chǔ)數(shù)據(jù)熟悉ContentProvider存儲(chǔ)數(shù)據(jù)本章目標(biāo)-2-數(shù)據(jù)存儲(chǔ)簡(jiǎn)介Android提供了四種數(shù)據(jù)存儲(chǔ)方式:使用Preference存儲(chǔ)數(shù)據(jù):Preference采用“鍵-值”對(duì)方式組織和管理數(shù)據(jù),其數(shù)據(jù)存儲(chǔ)在XML文件中。相對(duì)于其他方式,它是一個(gè)輕量級(jí)的存儲(chǔ)機(jī)制。該方式實(shí)現(xiàn)比較簡(jiǎn)單,適合簡(jiǎn)單數(shù)據(jù)的存儲(chǔ)。使用File存儲(chǔ)數(shù)據(jù):文件存儲(chǔ)的特點(diǎn)介于Preference與SQLite之間。從存儲(chǔ)量來(lái)看,文件存儲(chǔ)是一個(gè)“重量級(jí)”存儲(chǔ)機(jī)制,比Preference方式更適合存儲(chǔ)較大的數(shù)據(jù);從存儲(chǔ)結(jié)構(gòu)化來(lái)看,這種方式不同于SQLite,不適合結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)。使用SQLite存儲(chǔ)數(shù)據(jù):SQLite使用數(shù)據(jù)庫(kù)作為存儲(chǔ)方式,它是一個(gè)重量級(jí)的存儲(chǔ)機(jī)制,適合大數(shù)據(jù)量的數(shù)據(jù)存儲(chǔ),通過(guò)這種方式能夠很容易的對(duì)數(shù)據(jù)進(jìn)行增加、插入、刪除、更新等操作。相比Preference和文件存儲(chǔ),使用SQLite較為復(fù)雜。使用網(wǎng)絡(luò)存儲(chǔ)數(shù)據(jù):將數(shù)據(jù)通過(guò).*和.*包中的類(lèi)存儲(chǔ)于網(wǎng)絡(luò),會(huì)在后續(xù)的網(wǎng)絡(luò)通信中涉及。
Preference存儲(chǔ)數(shù)據(jù)-1
Preference提供了一種輕量級(jí)的數(shù)據(jù)存儲(chǔ)方式,主要應(yīng)用在數(shù)據(jù)量比較少的情況下。它以“key-value”方式將數(shù)據(jù)保存在一個(gè)XML文件中。SharedPreferences常用的方法:-3-方法功能描述contains(Stringkey)判斷是否包含一個(gè)該鍵值edit()返回SharedPreferencesEditor對(duì)象getAll()取得所有值MapgetBoolean(Stringkey,booleandefValue)獲取一個(gè)布爾值getFloat(Stringkey,floatdefValue)獲取一個(gè)float值getInt(Stringkey,intdefValue)獲取一個(gè)int值getString(Stringkey,StringdefValue)獲取一個(gè)String值getLong(Stringkey,LongdefValue)獲取一個(gè)long值registerOnSharedPreferenceChangeListener()注冊(cè)preference發(fā)生變化的監(jiān)聽(tīng)函數(shù)unregisterOnSharedPreferenceChangeListener()注銷(xiāo)一個(gè)之前注冊(cè)的監(jiān)聽(tīng)函數(shù)Preference存儲(chǔ)數(shù)據(jù)-2SharedPreferences.Editor提供保存數(shù)據(jù)的方法:注意:
使用SharedPreferences.Editor的putXXX()方法保存數(shù)據(jù)時(shí),需要根據(jù)數(shù)據(jù)類(lèi)型調(diào)用相應(yīng)的putXXX()方法。例如調(diào)用putString()方法為字符串建立鍵值對(duì)。存儲(chǔ)數(shù)據(jù)的XML存儲(chǔ)在“/data/data/包名/shared_prefs/”目錄下
-4-方法功能描述clear()清除所有值commit()保存getAll()返回所有值MapputBoolean(Stringkey,booleanvalue)保存一個(gè)布爾值putFloat(Stringkey,floatvalue)保存一個(gè)float值putInt(Stringkey,intvalue)保存一個(gè)int值putLong(Stringkey,longvalue)保存一個(gè)long值putString(Stringkey,Stringvalue)保存一個(gè)String值remove(Stringkey)刪除key所對(duì)應(yīng)的值Preference存儲(chǔ)數(shù)據(jù)-3使用SharedPreferences的步驟:首先使用getSharedPreferences()生成SharedPreferences對(duì)象。使用SharedPreferences.Editor的putXXX()方法保存數(shù)據(jù)。使用SharedPreferences.Editor的commit()方法將上一步保存的數(shù)據(jù)寫(xiě)到XML文件。使用SharedPreferences的getXXX()方法獲取相應(yīng)數(shù)據(jù)。-5-File存數(shù)數(shù)據(jù)-1文件存儲(chǔ)方式不受類(lèi)型限制,可以將一些數(shù)據(jù)直接以文件的形式保存在設(shè)備中,如文本文件、PDF、音頻、圖片等。如果需要存儲(chǔ)復(fù)雜數(shù)據(jù),可以使用文件進(jìn)行存儲(chǔ)。Android提供了讀寫(xiě)文件的方法。通過(guò)Context.openFileInput()方法可以獲取標(biāo)準(zhǔn)的文件輸入流(FileInputStream),讀取設(shè)備上的文件;通過(guò)Context.openFileOuput()方法可以獲取標(biāo)準(zhǔn)的文件輸出流(FileOutputStream)。讀取文件的代碼如下所示:保存文件的代碼如下所示:-6-Stringfile="dh.txt";//定義文件名//獲取指定文件的文件輸入流FileInputStreamfileInputStream=openFileInput(file);//定義一個(gè)字節(jié)緩存數(shù)組byte[]buffer=newbyte[fileInputStream.available()];//將數(shù)據(jù)讀到緩存區(qū)fileInputStream.read(buffer);//關(guān)閉文件輸入流fileInputStream.close();//獲取文件輸出流,操作模式是私有FileOutputStreamfileOutputStream=openFileOutput(file,Context.MODE_PRIVATE);//將內(nèi)容寫(xiě)入文件fileOutputStream.write(fileContent.getBytes());File存數(shù)數(shù)據(jù)-2openFileOutput()方法的第二個(gè)參數(shù)用于指定輸出流的模式,Android提供了四種輸出模式-7-模式功能描述Context.MODE_PRIVATE私有模式,這種模式創(chuàng)建的文件是私有文件,因而創(chuàng)建的文件只能被應(yīng)用本身訪(fǎng)問(wèn)。在該模式下,寫(xiě)入的內(nèi)容會(huì)覆蓋原文件的內(nèi)容Context.MODE_APPEND附加模式,該模式會(huì)首先檢查文件是否存在,若文件不存則創(chuàng)建新文件,否則在原文件中追加內(nèi)容Context.MODE_WORLD_WRITABLE可寫(xiě)模式,該模式的文件可以被其他應(yīng)用修改Context.MODE_WORLD_READABLE可讀模式,該模式的文件可以被其他應(yīng)用讀取注意:文件通常保存在“/data/data/包名/files”目錄下
SQLite存儲(chǔ)數(shù)據(jù)SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)。SQLite是一個(gè)嵌入式數(shù)據(jù)庫(kù)引擎,目的在于為內(nèi)存等資源有限的設(shè)備。SQLite數(shù)據(jù)庫(kù)是一種免費(fèi)開(kāi)源的且底層無(wú)關(guān)的數(shù)據(jù)庫(kù)。SQLite是基于C語(yǔ)言設(shè)計(jì)開(kāi)發(fā)的開(kāi)源數(shù)據(jù)庫(kù),最大支持2048G數(shù)據(jù)。SQLite特征:輕量級(jí)、獨(dú)立、便于管理和維護(hù)、可移植性、語(yǔ)言無(wú)關(guān)、事務(wù)性。SQLite操作簡(jiǎn)單,且數(shù)據(jù)庫(kù)功能強(qiáng)大,提供了基本數(shù)據(jù)庫(kù)、表以及記錄的操作包括數(shù)據(jù)庫(kù)創(chuàng)建、數(shù)據(jù)庫(kù)刪除、表創(chuàng)建、表刪除、記錄插入、記錄刪除、記錄更新、記錄查詢(xún)。-8-SQLite數(shù)據(jù)庫(kù)操作-1SQLiteDatabase常用的方法:-9-方法方法描述openOrCreateDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory)打開(kāi)或創(chuàng)建數(shù)據(jù)庫(kù)openDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory,intflags)打開(kāi)指定的數(shù)據(jù)庫(kù)close()關(guān)閉數(shù)據(jù)庫(kù)insert(Stringtable,StringnullColumnHack,ContentValuesvalues)插入一條記錄delete(Stringtable,StringwhereClause,String[]whereArgs)刪除一條記錄query(booleandistinct,Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy,Stringlimit)查詢(xún)記錄update(Stringtable,ContentValuesvalue,StringwhereClause,String[]whereArgs)修改記錄execSQL(Stringsql)執(zhí)行一條SQL語(yǔ)句SQLite數(shù)據(jù)庫(kù)操作-2使用openDatabase()方法打開(kāi)指定的數(shù)據(jù)庫(kù):使用openOrCreateDatabase()方法打開(kāi)或創(chuàng)建指定數(shù)據(jù)庫(kù):刪除數(shù)據(jù)庫(kù):關(guān)閉數(shù)據(jù)庫(kù):-10-SQLiteDatabasesqliteDatabase=SQLiteDatabase.openDatabase("qdu_Student.db",null,NO_LOCALIZED_COLLATORS);SQLiteDatabasesqliteDatabase= SQLiteDatabase.openOrCreateDatabase(“qdu_Student.db”,null);deleteDatabase("qdu_Student.db");//刪除數(shù)據(jù)庫(kù)qdu_Student.dbsqliteDatabase.close();//關(guān)閉數(shù)據(jù)庫(kù)表操作創(chuàng)建表:刪除表-11-//創(chuàng)建表的SQL語(yǔ)句StringSQL_CT="CREATETABLEstudent(IDINTEGERPRIMARYKEY,ageINTEGER,nameTEXT)";//執(zhí)行該SQL語(yǔ)句創(chuàng)建表sqliteDatabase.execSQL(SQL_CT);//刪除表的SQL語(yǔ)句StringSQL_DROP_TABLE="DROPTABLEstudent";//刪除表studentsqliteDatabase.execSQL(SQL_DROP_TABLE);記錄操作-1向表中插入記錄有兩種實(shí)現(xiàn)方式:insert()方法:示例:execSQL()方法:-12-insert(Stringtable,StringnullColumnHack,ContentValuesvalues)表名稱(chēng)空列的默認(rèn)值一條記錄信息//創(chuàng)建ContentValues對(duì)象ContentValuescontentValues=newContentValues();//將ID、age和name放入contentValuescontentValues.put("ID",1);contentValues.put("age",26);contentValues.put("name","StudentA");//調(diào)用insert()方法將contentValues對(duì)象封裝的數(shù)據(jù)插入到student表中sqliteDatabase.insert("student",null,contentValues);//定義插入SQL語(yǔ)句StringSQL_INSERT="INSERTINTOstudent(ID,age,name)values(1,26,'StudentA')";//調(diào)用execSQL()方法執(zhí)行SQL語(yǔ)句,將數(shù)據(jù)插入到student表中sqliteDatabase.execSQL(SQL_INSERT);記錄操作-2更新記錄也是兩種實(shí)現(xiàn)方式:update()方法:
示例:execSQL()方法:-13-update(Stringtable,ContentValuesvalue,StringwhereClause,String[]whereArgs)表名稱(chēng)更新的記錄信息條件(where子句)條件值數(shù)組//創(chuàng)建ContentValues對(duì)象ContentValuescontentValues=newContentValues();contentValues.put("ID",1);//更新age為25contentValues.put("age",25);contentValues.put("name","StudentA");//調(diào)用update()方法更新student表中名為StudentA記錄數(shù)據(jù)sqliteDatabase.update("student",contentValues,"name=StudentA",null);//定義更新SQL語(yǔ)句StringSQL_UPDATE="UPDATEstudentSETage=25wherename='StudentA'";//調(diào)用execSQL()方法執(zhí)行SQL語(yǔ)句更新student表中的記錄sqliteDatabase.execSQL(SQL_UPDATE);記錄操作-3使用SQLiteDatabase的query()方法可以查詢(xún)記錄。Cursor游標(biāo)常用的方法:-14-方法功能描述move(intoffset)以當(dāng)前的位置為基準(zhǔn),將Cursor移動(dòng)到偏移量為offset的位置。若移動(dòng)成功返回true,失敗返回false。注意offset為正值時(shí),游標(biāo)向前移動(dòng);負(fù)值時(shí),向后移動(dòng)moveToPosition(intposition)將Cursor移動(dòng)到絕對(duì)位置position位置,若移動(dòng)成功返回true,失敗返回false。注意moveToPosition移動(dòng)到一個(gè)絕對(duì)位置,而move移動(dòng)以當(dāng)前位置為基準(zhǔn)moveToNext()將Cursor向前移動(dòng)一個(gè)位置,成功返回true,失敗返回false。其功能等同于move(1)moveToLast()將Cursor移動(dòng)到最后一條記錄,成功返回true,失敗返回false。若當(dāng)前記錄數(shù)為count,則其功能等同于moveToPosition(count)moveToFisrt()將Cursor移動(dòng)到第一條記錄,成功返回true,失敗返回false。其功能等同于moveToPosition(1)isBeforeFirst()判斷Cursor是否指向第一項(xiàng)數(shù)據(jù)之前。若指向第一項(xiàng)數(shù)據(jù)之前,返回true;否則返回falseisAfterLast()判斷Cursor是否指向最后一項(xiàng)數(shù)據(jù)之后。若指向最后一項(xiàng)數(shù)據(jù)之后,返回true;否則返回falseisClosed()判斷Cursor是否關(guān)閉。若Cursor關(guān)閉,返回true;否則返回falseisFirst()判斷Cursor是否指向第一項(xiàng)記錄isLast()判斷Cursor是否指向最后一條記錄isNull(intcolumnIndex)判斷指定的位置columnIndex的記錄是否存在getCount()獲取當(dāng)前表的行數(shù)即記錄總數(shù)getInt(intcolumnIndex)獲取指定列索引的int類(lèi)型值getString(intcolumnIndex)獲取指定列索引的String類(lèi)型值publicCursorquery(booleandistinct,Stringtable,String[]columns, Stringselection,String[]selectionArgs,StringgroupBy, Stringhaving,StringorderBy,Stringlimit);是否只包含唯一的值表名稱(chēng)列名稱(chēng)數(shù)組條件參數(shù)數(shù)組分組列分頁(yè)查詢(xún)限制分組條件排序記錄操作-4以查詢(xún)StudentA的記錄為例,使用query()方法查詢(xún)記錄的代碼:刪除記錄也有兩種實(shí)現(xiàn)的方式:delete()方法execSQL()方法-15-//查詢(xún)獲得游標(biāo)Cursorcursor=sqliteDatabase.query(true,"student",null,"name=StudentA",null,null,null,null,null);//將游標(biāo)移動(dòng)到第一條記錄,并判斷if(cursor.moveToFirst()){ //獲得列信息
intid=cursor.getInt(0); intage=cursor.getInt(1); Stringname=cursor.getString(3); //輸出
System.out.println(id+":"+age+":"+name);}delete(Stringtable,StringwhereClause,String[]whereArgs)表名稱(chēng)條件參數(shù)數(shù)組//定義更新SQL語(yǔ)句StringSQL_DELETE="DELETEFORMstudentwherename='StudentA'";//調(diào)用execSQL()方法執(zhí)行SQL語(yǔ)句更新student表中的記錄sqliteDatabase.execSQL(SQL_DELETE);SQLiteOpenHelperSQLiteOpenHelper類(lèi)的常用方法:一般SQLiteOpenHelper的用法是:通過(guò)創(chuàng)建一個(gè)類(lèi)繼承SQLiteOpenHelper,重寫(xiě)onCreate()和onUpgrade()方法,并添加insert()、delete()、query()方法,分別實(shí)現(xiàn)數(shù)據(jù)的添加、刪除和查詢(xún)。-16-方法功能描述SQLiteOpenHelper(Contextcontext,Stringname,SQLiteDatabase.CursorFactory,intversion)構(gòu)造函數(shù),第二個(gè)參數(shù)是數(shù)據(jù)庫(kù)名稱(chēng)onCreate(SQLiteDatabasedb)創(chuàng)建數(shù)據(jù)庫(kù)時(shí)調(diào)用onUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)版本更新時(shí)調(diào)用getReadableDatabase()創(chuàng)建或打開(kāi)一個(gè)只讀數(shù)據(jù)庫(kù)getWritableDatabase()創(chuàng)建或打開(kāi)一個(gè)讀寫(xiě)數(shù)據(jù)庫(kù)數(shù)據(jù)共享ContentProviderContentProvider是Android提供的應(yīng)用組件,定義在android.content包下面,通過(guò)這個(gè)組件可訪(fǎng)問(wèn)Android提供的應(yīng)用數(shù)據(jù)如聯(lián)系人列表。ContentProvider的常用方法:-17-方法功能描述insert(Uri,ContentValues)插入數(shù)據(jù)delete(Uri,String,String[])刪除數(shù)據(jù)update(Uri,ContentValues,String,String[])更新數(shù)據(jù)query(Uri,String[],String,String[],String)查詢(xún)數(shù)據(jù)getType(Uri)獲得MIME數(shù)據(jù)類(lèi)型onCreate()創(chuàng)建ContentProvider時(shí)調(diào)用getContext()獲得Context對(duì)象數(shù)據(jù)共享ContentProvider數(shù)據(jù)模型:ContentProvider將其存儲(chǔ)的數(shù)據(jù)以數(shù)據(jù)表的形式提供給訪(fǎng)問(wèn)者。在數(shù)據(jù)表中每一行為一條記錄,而每一列為具有特定類(lèi)型和意義的字段。每一條數(shù)據(jù)記錄都包括一個(gè)“_ID”數(shù)據(jù)列,該字段唯一標(biāo)識(shí)一個(gè)記錄。URI:每一個(gè)ContentProvider都對(duì)外提供一個(gè)自身數(shù)據(jù)集的唯一標(biāo)識(shí)URI格式:
例如:Android中使用Uri類(lèi)來(lái)定義URI:content://數(shù)據(jù)路徑/標(biāo)識(shí)ID(可選)content://media/internal/images(該URI返回設(shè)備上存儲(chǔ)的所有圖片)content://contacts/people/5(該URI返回ID為5的聯(lián)系人信息)Uriuri=Uri.parse("content://media/internal/images");Uriuri=Uri.parse("content://contacts/people/5");-18-ContentResolverContentResolver提供了對(duì)ContentProvider的數(shù)據(jù)進(jìn)行查詢(xún)、插入、修改和刪除等操作的方法,在開(kāi)發(fā)過(guò)程中是間接的通過(guò)操作ContentResolver來(lái)操作ContentProvider的。使用getContentResolver()方法獲取ContentResolver實(shí)例對(duì)象:使用query()方法查詢(xún):使用insert()方法插入數(shù)據(jù),注意先將數(shù)據(jù)封裝到ContentValues對(duì)象中:使用delete()方法刪除數(shù)據(jù):使用update()方法實(shí)現(xiàn)記錄的更新操作,代碼如下所示:-19-ContentResolvercr=getContentResolver();//獲取ContentResolver對(duì)象Cursorcursor=cr.query(Contacts.CONTENT_URI,null,null,null,null);ContentValuescontentValues=newContentValues();values.put(Contacts._ID,1);//聯(lián)系人IDcontentValues.put(Contacts.DISPLAY_NAME,"zhangsa
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 全職助理合同范本
- 2025年長(zhǎng)沙貨物從業(yè)資格證考試
- 保安服務(wù)合同范本
- 代辦注銷(xiāo)合同范本
- 內(nèi)部包協(xié)議合同范本
- 動(dòng)遷協(xié)議出租合同范本
- 公司團(tuán)購(gòu)合同范例
- 農(nóng)業(yè)行業(yè)勞動(dòng)合同范本
- 修路回收物資合同范本
- 人員勞動(dòng)合同范本
- 中華人民共和國(guó)保守國(guó)家秘密法實(shí)施條例培訓(xùn)課件
- 2024年全國(guó)統(tǒng)一高考英語(yǔ)試卷(新課標(biāo)Ⅰ卷)含答案
- 2024年認(rèn)證行業(yè)法律法規(guī)及認(rèn)證基礎(chǔ)知識(shí) CCAA年度確認(rèn) 試題與答案
- 2024年濰坊工程職業(yè)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 部編版一年級(jí)語(yǔ)文下冊(cè)全冊(cè)分層作業(yè)設(shè)計(jì)
- 化工車(chē)間布置原則
- 硬筆書(shū)法紙(A3)
- 【公開(kāi)課課件】高三英語(yǔ)二輪復(fù)習(xí)polish writing
- 項(xiàng)目部安全生產(chǎn)組織機(jī)構(gòu)網(wǎng)絡(luò)圖(共3頁(yè))
- 觀音靈簽簽詞解(1-100簽)
- 工程造價(jià)鑒定申請(qǐng)書(shū)120112
評(píng)論
0/150
提交評(píng)論