Android數(shù)據(jù)存儲(chǔ)總結(jié)資料_第1頁
Android數(shù)據(jù)存儲(chǔ)總結(jié)資料_第2頁
Android數(shù)據(jù)存儲(chǔ)總結(jié)資料_第3頁
Android數(shù)據(jù)存儲(chǔ)總結(jié)資料_第4頁
Android數(shù)據(jù)存儲(chǔ)總結(jié)資料_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Android 數(shù)據(jù)存儲(chǔ)1)PreferenceSharedPreferences 也是一種輕型的數(shù)據(jù)存儲(chǔ)方式,它的本質(zhì)是基于 XML文件存儲(chǔ)key-value 鍵值對(duì)數(shù)據(jù),通常用來存儲(chǔ)一些簡單的配置信息。其存儲(chǔ)位置在/data/data/<包名>/shared_prefs目錄下(可以通過Eclipse下的FileExplorer查看創(chuàng)建的問題)。SharedPreferences 對(duì)象本身只能獲取數(shù)據(jù)而不支持存儲(chǔ)和修改,存儲(chǔ)修改是通過 Editor對(duì)象實(shí)現(xiàn)。SharedPreferences 支持三種訪問模式私有(MODE_PRIVATE ):僅有創(chuàng)建程序有權(quán)限對(duì)其進(jìn)行讀取或?qū)懭肴肿x(MODE_WORLD_READABLE ):表示當(dāng)前文件可以被其他應(yīng)用讀取全局寫(MODE_WORLD_WRITEABLE ):表示當(dāng)前文件可以被其他應(yīng)用寫入實(shí)現(xiàn)步驟如下:一、根據(jù)Activity類的方法獲取SharedPreferences對(duì)象,其中存儲(chǔ)key-value的文件的名稱由getSharedPreferences方法的第一個(gè)參數(shù)指定,第二個(gè)參數(shù)指定文件的操作模式。二、使用SharedPreferences 接口的edit()方法獲取 Editor對(duì)象。三、通過Editor對(duì)象接口的 putXxx和GetXxx方法存取 key-value 鍵值對(duì)數(shù)據(jù)。四、通過commit()方法提交數(shù)據(jù)。例:SharedPreferencessp=getSharedPreferences(PREF_FILE,MODE);Editoreditor=sp.edit();editor.putString("Name",str1);editor.putString("Number",str2);mit();// 提交修改//獲取數(shù)據(jù)StringName=sp.getString("Name","NULL");//清除數(shù)據(jù)editor.clear();// 清除所有值editor.remove("Number");// 清除某一項(xiàng)//配置變更監(jiān)聽器當(dāng)多個(gè)應(yīng)用共享配置時(shí),可以添加配置變更監(jiān)聽器,監(jiān)聽配置是否發(fā)生變化sp.registerOnSharedPreferenceChangeListener(newSharedPreferences.OnSharedPreferenceChangeListener() {@OverridepublicvoidonSharedPreferenceChanged(SharedPreferencessharedPreferences,Stringkey){}});SharedPreferences 對(duì)象與SQLite數(shù)據(jù)庫相比:優(yōu)點(diǎn):免去了創(chuàng)建數(shù)據(jù)庫,創(chuàng)建表,寫SQL語句等諸多操作,相對(duì)而言更加方便,簡潔。缺點(diǎn):只能存儲(chǔ)boolean,int,float,long和String五種簡單的數(shù)據(jù)類型;無法進(jìn)行條件查詢等。2)FileAndroid使用的是基于 Linux的文件系統(tǒng),程序開發(fā)人員可以建立和訪問程序自身的私有文件,也可以訪問保存在資源目錄中的原始文件和 XML文件,還可以在 SD卡等外部存儲(chǔ)設(shè)備中保存文件。也支持標(biāo)準(zhǔn) Java的IO類和方法。讀寫數(shù)據(jù)兩種方式:方式一:Android系統(tǒng)允許應(yīng)用程序創(chuàng)建僅能夠自身訪問的私有文件,文件保存在設(shè)備的內(nèi)部存儲(chǔ)器上,文件存儲(chǔ)在系統(tǒng)下的/data/data/<packagename>/files目錄中。主要接口:FileInputStreamfis=openFileInput(filename);//讀取數(shù)據(jù)FileOutputStreamfos=openFileOutput(filename);//寫入數(shù)據(jù)Android系統(tǒng)支持四種文件操作模式模式說明MODE_PRIVATE私有模式,缺陷模式,文件僅能夠被文件創(chuàng)建程序訪問,或具有相同UID的程序訪問。MODE_APPEND追加模式,如果文件已經(jīng)存在,則在文件的結(jié)尾處添加新數(shù)據(jù)。MODE_WORLD_READABLE全局讀模式,允許任何程序讀取私有文件。MODE_WORLD_WRITEABLE全局寫模式,允許任何程序?qū)懭胨接形募?/寫數(shù)據(jù)StringFILE_NAME="fileDemo.txt";FileOutputStreamfos=openFileOutput(FILE_NAME,Context.MODE_PRIVATE)Stringtext= “Somedata”;fos.write(text.getBytes());fos.flush();fos.close();//讀數(shù)據(jù)FileInputStreamfis=openFileInput(FILE_NAME);byte[]readBytes=newbyte[fis.available()];fis.read(readBytes);//刪除文件deleteFile(FILE_NAME);方式二:FileOutputStreamfos=newFileOutputStream(

file

絕對(duì)路徑

);FileInputStreamfos=newFileInputStream(

file

絕對(duì)路徑

);例SD讀寫操作:首先需要檢測系統(tǒng)的 /sdcard目錄是否可用 ;如果不可用,則說明設(shè)備中的 SD卡已經(jīng)被移除,在 Android被正確加載;如果可用,則直接通過使用標(biāo)準(zhǔn)的 類進(jìn)行訪問

模擬器則表明;

SD

卡映像沒有Filedir=newFile(SD_CARD);if(dir.exists()&&dir.canWrite()){FilenewFile=newFile(dir.getAbsolutePath()+"/"+FILE_NAME);FileOutputStreamfos =null;try{newFile.createNewFile();if(newFile.exists()&&newFile.canWrite()){fos =newFileOutputStream(newFile);fos.write(content.getBytes());}}catch(IOExceptione){e.printStackTrace();}finally{if(fos!=null){try{fos.flush();fos.close();}catch(IOExceptione){}}}}注:對(duì)SD卡訪問需添加:<!-- 在SDCard中創(chuàng)建與刪除文件權(quán)限 --><uses-permission<!-- 往SDCard寫入數(shù)據(jù)權(quán)限 --><uses-permission模擬器SD卡鏡像:1.創(chuàng)建SDcard鏡像文件mksdcard[-llabel]<size><file>-llabel 為SD卡創(chuàng)建一個(gè)卷標(biāo),可選項(xiàng);例:mksdcard1024Msdcard.img2.關(guān)聯(lián)sdcard和模擬器I.通過AVDManager,編輯虛擬機(jī)的SDCard關(guān)聯(lián)選擇,選中相關(guān)的鏡像文件;硬件配置需選擇支持SDCardsupportII.emulator.exe-avd模擬器名稱-sdcardsd卡鏡像的絕對(duì)或者相對(duì)路徑emulator.exe-avd2.2-sdcard../sdcard/sdcard.img3.將文件拷貝到sdcard上adbpush<local><remote>例:adbpushfoo.txtsdcard/adbpushE:\test.3gpsdcard/test.3gp4.安裝其他apkadbinstall***.apk5.擬器中使用SD卡文件Devtools里面Mediascannerscan 一下媒體文件3)SqliteAdnroid 中通過SQLite數(shù)據(jù)庫引擎來實(shí)現(xiàn)結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)。庫引擎,針對(duì)內(nèi)存等資源有限的設(shè)備提供的一種高效的數(shù)據(jù)庫引擎。

SQLite是一個(gè)嵌入式數(shù)據(jù)支持基本 SQL語法,是常被采用的一種數(shù)據(jù)存儲(chǔ)方式。主要特點(diǎn):輕量級(jí)SQLite和C/S模式的數(shù)據(jù)庫軟件不同,它是進(jìn)程內(nèi)的數(shù)據(jù)庫引擎,因此不存在數(shù)據(jù)庫的客戶端和服務(wù)器。使用 SQLite 一般只需要帶上它的一個(gè)動(dòng)態(tài) 庫,就可以享受它的全部功能。而且那個(gè)動(dòng)態(tài)庫的尺寸也挺小,以版本 為例,Windows 下487KB、Linux

下347KB不需要

。"安裝"SQLite的核心引擎本身不依賴第三方的軟件,使用它也不需要"安裝"。有點(diǎn)類似那種綠色軟件。單一文件數(shù)據(jù)庫中所有的信息(比如表、視圖等)都包含在一個(gè)文件內(nèi)。這個(gè)文件可以自由復(fù)制到其它目錄或其它機(jī)器上??缙脚_(tái)/可移植性除了主流操作系統(tǒng) windows,linux之后,SQLite還支持其它一些不常用的操作系統(tǒng)。弱類型的字段同一列中的數(shù)據(jù)可以是不同類型操作模型:SQLite數(shù)據(jù)庫采用了模塊化設(shè)計(jì),由 8個(gè)獨(dú)立的模塊構(gòu)成,這些獨(dú)立模塊又構(gòu)成了三個(gè)主要的子系統(tǒng),模塊將復(fù)雜的查詢過程分解為細(xì)小的工作進(jìn)行處理。接口由SQLiteCAPI組成,因此無論是應(yīng)用程序、腳本,還是庫文件,最終都是通過接口與SQLite交互編譯器由分詞器和分析器組成分詞器和分析器對(duì) SQL語句進(jìn)行語法檢查,然后把 SQL語句轉(zhuǎn)化為底層能更方便處理的分層的數(shù)據(jù)結(jié)構(gòu),這種分層的數(shù)據(jù)結(jié)構(gòu)稱為 “語法樹”把語法樹傳給代碼生成器進(jìn)行處理,生成一種針對(duì)SQLite的匯編代碼最后由虛擬機(jī)執(zhí)行虛擬機(jī)SQLite數(shù)據(jù)庫體系結(jié)構(gòu)中最核心的部分是虛擬機(jī),也稱為虛擬數(shù)據(jù)庫引擎( VirtualDatabaseEngine ,VDBE)與Java虛擬機(jī)相似,虛擬數(shù)據(jù)庫引擎用來解釋執(zhí)行字節(jié)代碼虛擬數(shù)據(jù)庫引擎的字節(jié)代碼由128個(gè)操作碼構(gòu)成,這些操作碼主要用以對(duì)數(shù)據(jù)庫進(jìn)行操作,每一條指令都可以完成特定的數(shù)據(jù)庫操作,或以特定的方式處理?xiàng)5膬?nèi)容后端后端由B-樹、頁緩存和操作系統(tǒng)接口構(gòu)成B-樹的主要功能就是索引,它維護(hù)著各個(gè)頁面之間的復(fù)雜的關(guān)系,便于快速找到所需數(shù)據(jù)頁緩存的主要作用就是通過操作系統(tǒng)接口在B-樹和磁盤之間傳遞頁面B-樹和頁緩存共同對(duì)數(shù)據(jù)進(jìn)行管理SQLite支持 NULL、INTEGER、REAL(浮點(diǎn)數(shù)字)、 TEXT(字符串文本)和BLOB(二進(jìn)制對(duì)象,大數(shù)據(jù))數(shù)據(jù)類型.雖然它支持的類型雖然只有五種,但實(shí)際上 sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等數(shù)據(jù)類型,只不過在運(yùn)算或保存時(shí)會(huì)轉(zhuǎn)成對(duì)應(yīng)的五種數(shù)據(jù)類型。 SQLite最大的特點(diǎn)是你可以保存任何類型的數(shù)據(jù)到任何字段中, 無論這列聲明的數(shù)據(jù)類型是什么。 例如:可以在 Integer字段中存放字符串,或者在布爾型字段中存放浮點(diǎn)數(shù),或者在字符型字段中存放日期型值。 但有一種情況例外:定義為 INTEGERPRIMARYKEY 的字段只能存儲(chǔ)64位整數(shù), 當(dāng)向這種字段中保存除整數(shù)以外的數(shù)據(jù)時(shí), 將會(huì)產(chǎn)生錯(cuò)誤。 另外, SQLite在解析CREATETABLE 語句時(shí),會(huì)忽略 CREATETABLE 語句中跟在字段名后面的數(shù)據(jù)類型信息。數(shù)據(jù)庫都保存在各自的

/data/data/<packagename>/databases

目錄下

;通過SQL語句創(chuàng)建數(shù)據(jù)庫:創(chuàng)建表:CREATETABLEperson(personidintegerprimarykeyautoincrement,namevarchar(20))查詢語句:select*from排序子句select*fromperson

表名

where

條件子句

groupby

分組字句

having...orderbyselect*frompersonorderbyiddescselectnamefrompersongroupbynamehavingcount(*)>1分頁SQL與mysql類似,下面 SQL語句獲取 5條記錄,跳過前面 3條記錄select*fromAccountlimit5offset3 或者 select*fromAccountlimit3,5插入語句:insertinto 表名(字段列表)values( 值列表)。如:insertintoperson(name,age)values( 傳智‘’,3)更新語句:update 表名 set 字段名=值where 條件子句。如:updatepersonsetname= 傳‘智‘whereid=10刪除語句:deletefrom 表名 where 條件子句。如:deletefrompersonwhereid=10SQLITE_MASTER 表:SQLite數(shù)據(jù)庫的對(duì)象信息 (表、視圖、序列、索引等等)被保存在一個(gè)名叫 "sqlite_master"的特殊的表中。你可以像查詢其它表一樣通過執(zhí)行 “SELECT”查詢這個(gè)特殊的表。例如:sqlite>select*fromsqlite_master;但你不能在 sqlite_master 表中執(zhí)行諸如 DROPTABLE,UPDATE,INSERT 或者DELETE 命令。sqlite_master 表在你創(chuàng)建、刪除和索引數(shù)據(jù)庫時(shí)自動(dòng)更新這個(gè)表。你不能手工更改 sqlite_master 表。TEMPORARY 表的結(jié)構(gòu)沒有存儲(chǔ)在 "sqlite_master" 表中,由于 TEMPORARY 表對(duì)應(yīng)用是不可見的,而不是應(yīng)用程序創(chuàng)建這個(gè)表。 TEMPORARY 表結(jié)構(gòu)被存儲(chǔ)在另外一個(gè)名叫"sqlite_temp_master" 的特定的表中。 "sqlite_temp_master" 表是臨時(shí)表自身。通過adbshell 進(jìn)入手機(jī)系統(tǒng)sqlite3people.dbCREATE TABLE peopleinfo (_idinteger primary keyautoincrement, name textnotnull,ageinteger,heightfloat); //創(chuàng)建表insertintopeopleinfovalues(null,'Tom',21,1.81);// 插入deletefrompeopleinfowhere_id=2// 刪除select*frompeopleinfo //查詢droptablepeopleinfo// 刪除數(shù)據(jù)表.tables//查看數(shù)據(jù)表格是否創(chuàng)建成功;通過Android 提供的接口創(chuàng)建Android 提供了創(chuàng)建和使用數(shù)據(jù)庫的相關(guān) API:SQLiteDatabase 類:代表數(shù)據(jù)庫對(duì)象,提供了操作數(shù)據(jù)庫的一些方法 :創(chuàng)建、插入,刪除、修改、查詢等;SQLiteDatabase 的常用方法方法 描述用于打開或創(chuàng)建一個(gè)數(shù)據(jù)庫(對(duì)于sqlite來說,publicstaticSQLiteDatabaseopenOrCreateDatabase就是打開或產(chǎn)生一個(gè)數(shù)據(jù)庫文件),參數(shù)中的File類就是java中表示系統(tǒng)文件路徑的(Stringpath,SQLiteDatabase.CursorFactoryfactory)File類,而SQLiteDatabase.CursorFactory則是一個(gè)產(chǎn)生Cursor對(duì)象的工廠類publiclonginsert(Stringtable,StringnullColumnHack,用于在數(shù)據(jù)庫中加入數(shù)據(jù)。ContentValue類似于java中HashMap類,用于以鍵值對(duì)的方式保存ContentValuesvalues)數(shù)據(jù)publicintdelete(Stringtable,StringwhereClause,刪除表中的數(shù)據(jù)String[]whereArgs)publicCursorquery(booleandistinct,Stringtable,String[]columns,Stringselection,String[]查詢數(shù)據(jù)庫中的數(shù)據(jù),返回查詢結(jié)果集selectionArgs,StringgroupBy,Stringhaving,StringorderBy,Stringlimit)publicintupdate(Stringtable,ContentValuesvalues,用于修改數(shù)據(jù)StringwhereClause,String[]whereArgs)publicvoidexecSQL(Stringsql)執(zhí)行String表示的非查詢的SQL語句,例如Create等publicvoidclose()用來關(guān)閉數(shù)據(jù)庫并釋放數(shù)據(jù)庫占用的相關(guān)資源SQLiteOpenHelper 類:該類是SQLiteDatabase 一個(gè)輔助類。這個(gè)類主要生成一個(gè)數(shù)據(jù)庫, 并對(duì)數(shù)據(jù)庫的版本進(jìn)行管理。當(dāng)在程序當(dāng)中調(diào)用這個(gè)類的方法 getWritableDatabase() 或者getReadableDatabase() 方法的時(shí)候,如果當(dāng)時(shí)沒有數(shù)據(jù),那么 Android 系統(tǒng)就會(huì)自動(dòng)生成一個(gè)數(shù)據(jù)庫。 SQLiteOpenHelper 是一個(gè)抽象類,我們通常需要繼承它,并且實(shí)現(xiàn)里面的3個(gè)函數(shù):1.onCreate(SQLiteDatabase )在數(shù)據(jù)庫第一次生成的時(shí)候會(huì)調(diào)用這個(gè)方法。2. onU

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論