最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

數(shù)據(jù)存儲

2021-07-06 09:32 作者:獨(dú)行D暗靈  | 我要投稿

數(shù)據(jù)存儲簡介和文件存儲

  • Android常見的三類四種數(shù)據(jù)存儲方式︰

    • Internal Storage (內(nèi)部存儲)

    • External Storage (外部存儲)

    • 使用SharedPreferences存儲數(shù)據(jù)

    • 文件存儲數(shù)據(jù)

    • SQLite數(shù)據(jù)庫存儲數(shù)據(jù)

  • Android提供的幾種存儲方式簡單介紹如下∶


    • SharedPreference:提供了一套完整的框架用來存儲基本類型數(shù)據(jù)的鍵值對,例如︰Long . int、float、String等。

    • Internal Storage :手機(jī)的內(nèi)部存儲設(shè)備是以文件的形式保存數(shù)據(jù)的,因此只能在本程序使用,外部的應(yīng)用程序無法訪問該文件,同時(shí)文件數(shù)據(jù)也是臨時(shí)性的,當(dāng)卸載本程序時(shí),該文件也會自動被刪除。

    • External Storage :手機(jī)的外接存儲設(shè)備也是以文件的形式存儲數(shù)據(jù),可以存儲數(shù)據(jù)量較大的公共數(shù)據(jù)。外接的存儲設(shè)備可以是移動式的(比如SD卡),應(yīng)該注意的是,對于保存在外接設(shè)備的數(shù)據(jù)是不安全的,因?yàn)樵撛O(shè)備中的數(shù)據(jù)對外部公開,用戶可以進(jìn)行讀寫操作,甚至刪除數(shù)據(jù)。

    • SQLite Database : SQLite是標(biāo)準(zhǔn)的關(guān)系型數(shù)據(jù)庫,用戶可以使用標(biāo)準(zhǔn)的SQL語句進(jìn)行數(shù)據(jù)的增刪改查,該數(shù)據(jù)庫具有小巧、獨(dú)立性高、隔離性好、安全性高、跨平臺和多語言接口等優(yōu)點(diǎn),它被內(nèi)置在Android系統(tǒng)中,用于存儲一些較復(fù)雜類型的數(shù)據(jù),且系統(tǒng)中比較大的數(shù)據(jù)一般也都是用SQLite數(shù)據(jù)庫存儲(這也是Google工程師為什么在Android中內(nèi)置該數(shù)據(jù)庫的原因)。

  • 內(nèi)部存儲

    • 內(nèi)部存儲路徑中的文件是分類存儲的,無法干涉,除了cache目錄,其它目錄系統(tǒng)不會自動創(chuàng)建


    • 除了files目錄,別的目錄幾乎都是無法手動操作的

    • 其它app幾乎無法訪問內(nèi)部存儲中的數(shù)據(jù),除了用非法手段或者主動暴露

    • 內(nèi)部存儲目錄下的文件夾及文件會隨著app的卸載而被系統(tǒng)自動刪除

    • Build.VERSION_CODES.LOLLIPOP及以上版本新增的API

    • Build.VERSION_CODES.N及以上版本新增的API

    • getDir( “test", MODE_PRIVATE) /data/data/0/包名/app_test

    • getNoBackupFilesDir() /data/data/0/包名/no_backup

    • getCodeCacheDir() /data/data/0/包名/code_cache

    • getDataDir() /data/data

    • 通過Environment

    • 通過上下文Context

    • Environment.getDataDirectory() /data

    • Environment.getRootDirectory() /system

    • Environment.getDownloadCacheDirectory() /cache

    • getCacheDir() /data/data/0/包名/cache

    • getFilesDir() /data/data/0/包名/files

    • 獲取內(nèi)部存儲路徑和API對應(yīng)關(guān)系

    • 獲取內(nèi)部存儲路徑和API對應(yīng)關(guān)系

    • 特點(diǎn)


  • 外部存儲

    • 私有目錄不需要訪問權(quán)限

    • Android在外部存儲空間中也提供了特殊目錄供app存放私有文件,該路徑為︰/storage/emulated/0/Android/data/包名/((注意:應(yīng)用安裝之后此路徑是沒有對應(yīng)的應(yīng)用文件夾的,需要手動調(diào)用對應(yīng)的API創(chuàng)建)

    • 獲取私有目錄路徑

    • getObbDir() /storage/emulated/0/Android/obb/com.xxx.autorepair

    • getExternalCacheDir() /storage/emulated/0/Android/data/com.xxx.autorepair/cache

    • getExternalFilesDir(null) /storage/emulated/0/Android/data/com.xxx.autorepair/files

    • 私有目錄

在API級別29中不贊成使用此方法。為了提高用戶隱私,不建議直接訪問共享/外部存儲設(shè)備。當(dāng)應(yīng)用定位到時(shí)Build.VERSION_CODES.Q,此方法返回的路徑不再可供應(yīng)用直接訪問。應(yīng)用程序可以繼續(xù)訪問內(nèi)容通過遷移到替代品,如存儲在共享/外部存儲Context#getExternalFilesDir(String),MediaStore或Intent#ACTION_OPEN_DOCUMENT。


  • 為什么需要分區(qū)存儲

    • 亂占空間

    • 隨意讀取用戶的數(shù)據(jù)

    • 隨意讀取應(yīng)用的數(shù)據(jù)

    • 私有存儲(Private Storage):每個(gè)應(yīng)用在內(nèi)部存儲中都擁有自己的私有目錄 "/data/data/packageName”,其它應(yīng)用看不到,彼此也無法訪問到該目錄

    • 共享存儲(Shared Storage):除了私有存儲以外,其它的一切都被認(rèn)定是共享 存儲,如︰媒體集(Media Collection)和SD卡外部應(yīng)用存儲目錄

    • Android中存儲可以分為兩大類∶私有存儲和共享存儲

    • 如此寬泛的存儲權(quán)限,這就使得Android中某些應(yīng)用程序大量的存在如下問題∶

Android 10中的分區(qū)存儲的出現(xiàn),就是為了解決上述的問題,即主要就是為了限制應(yīng)用程序過于寬泛的存儲權(quán)限!


  • Android10中分區(qū)存儲設(shè)計(jì)遵循的三個(gè)原則

    • 更好的文件屬性:系統(tǒng)應(yīng)用知道什么文件屬于哪一個(gè)app,讓用戶更加容易管理他們自己的文件。當(dāng)app 被卸載了,被應(yīng)用創(chuàng)建的內(nèi)容,除非用戶希望保留,否則不應(yīng)該保留下來。

    • 用戶的數(shù)據(jù)安全:當(dāng)用戶下載文件,比如敏感的電子郵件附件,這些文件對大多數(shù)應(yīng)用程序都不應(yīng)該可見。

    • 應(yīng)用的數(shù)據(jù)安全∶當(dāng)app將特定于應(yīng)用程序的文件寫入外部存儲時(shí),其他應(yīng)用程序不應(yīng)該可見這些文件。

  • Android10中分區(qū)存儲設(shè)計(jì)的七個(gè)注意事項(xiàng)

    • 應(yīng)用訪問自己的應(yīng)用目錄不受限制(包括內(nèi)部和外部)無需任何權(quán)限

    • 應(yīng)用向媒體集和下載目錄提供文件,如果您要想保存圖片、視頻、音頻、文檔,無需任何權(quán)限

    • 不再提供寬泛的共享存儲(Share Storage ),讀寫存儲權(quán)限只能訪問提供的媒體集(圖片集、視頻集、音頻集)

    • 位置元數(shù)據(jù)限制,獲取圖片上的位置等信息需要請求權(quán)限,如果不請求權(quán)限,讀取圖片的信息的時(shí)候,位置元數(shù)據(jù)將會被刪除

    • 讀取PDF或其他類型的文件,需要調(diào)用系統(tǒng)的文件選擇器(Storage Access Framerwork API )

    • 在媒體集或應(yīng)用目錄之外,寫任何文件都需要系統(tǒng)的文件選擇器,這樣用戶能選擇并確認(rèn)將文件存在哪里

    • requestLegacyExternalStorage開關(guān)值,在清單文件配置,如果開啟了,存儲權(quán)限就會像之前版本中的Android一樣運(yùn)作

  • 具體分區(qū)存儲權(quán)限的介紹

    • 應(yīng)用外部特定目錄中的文件(使用getExternalFilesDir()訪問)。

    • 應(yīng)用自己創(chuàng)建的照片、視頻和音頻(通過MediaStore訪問)。

    • 默認(rèn)情況下,對于targetSdkVersion大于等于29的應(yīng)用,其訪問權(quán)限范圍限定為分區(qū)存儲。此應(yīng)用無需請求與存儲相關(guān)的用戶權(quán)限,即可以查看外部存儲中以下類型的文件:

    • 分區(qū)存儲將影響在Android10系統(tǒng)首次安裝啟動、且targetSdkVersion>=29的應(yīng)用。需要訪問和共享外部存儲文件的應(yīng)用會受到影響,需要進(jìn)行兼容性適配。

  • 影響范圍

    • 如果應(yīng)用最先安裝在Android 10以下的系統(tǒng),

    • 然后系統(tǒng)通過Fota升級到Android 10

    • 應(yīng)用通過更新升級到targetSdkVersion >= 29

    • targetSdkVersion <= 28,不受影響。

    • 如果targetSdkVersion >= 29,默認(rèn)情況應(yīng)用外部存儲可見性將被過濾,應(yīng)用需要對分區(qū)存儲進(jìn)行適配。

    • 在Android 10上運(yùn)行的應(yīng)用∶

    • 還有值得注意的是以下兩種情況比較特殊,不會受到分區(qū)存儲的影響︰


  • 分區(qū)存儲權(quán)限體現(xiàn)在以下五個(gè)方面:

    • 媒體文件需要媒體目錄進(jìn)行創(chuàng)建,不能在圖片目錄創(chuàng)建音頻文件,如果您想訪問由其他應(yīng)用創(chuàng)建的媒體文件,您就要請求外部存儲讀取權(quán)限。如果您沒有獲得媒體位置權(quán)限,就仍然會在讀取由其他應(yīng)用創(chuàng)建的媒體文件時(shí),被系統(tǒng)拿掉位置信息。

    • 非媒體文件必須在 Downloads下創(chuàng)建,所有Dowonloads目錄下也只能創(chuàng)建像PDF 或其它的非媒體文件

    • 讀取由其他應(yīng)用創(chuàng)建的非媒體文件,也將需要Storage Access Framerwork API

    • 所有的應(yīng)用都盡量繼續(xù)使用MediaStore,因?yàn)楹笈_文件路徑 ”/sdcard/DCIM/xxx.JPG”請求或使用文件路徑"/sdcard/DCIM/xxx.JPG"進(jìn)行I/O流請求都是代理給MediaStore類。

    • 不建議直接使用媒體文件訪問路徑“/sdcard/DCIM/xxx.JPG]”,應(yīng)用的性能會略有下降。

    • 可以在應(yīng)用獲取那些其他應(yīng)用創(chuàng)建添加的媒體文件的時(shí)候,直接刪除這些元數(shù)據(jù)

    • 如果想要獲取圖片的位置信息,需要聲明請求權(quán)限 ACCESS_MEDIA_LOCATION,用戶在Settings UI里看不到這個(gè)權(quán)限,但是它屬于運(yùn)行時(shí)權(quán)限,所以必須要在Manifest里聲明該權(quán)限,并在運(yùn)行時(shí)同時(shí)請求該權(quán)限和讀取外部存儲權(quán)限

    • MediaStore.setRequireOriginal ()∶獲取當(dāng)前磁盤的體積容量

    • 下載文件集,和媒體文件集一樣,無需請求任何權(quán)限就能在這個(gè)集中添加、編輯、刪除非媒體文件。

    • 與媒體文件不同的是,即使有讀取外部存儲權(quán)限,也是不允許訪問由其他應(yīng)用創(chuàng)建添加的非媒體文件。想要取得權(quán)限,需要通過調(diào)用Storage Access FramerworkAPI,啟動系統(tǒng)文件選擇器,讓用戶可以進(jìn)行選擇可以訪問哪些文件和目錄。

    • 如果用戶允許應(yīng)用訪問一個(gè)文件,那么這個(gè)權(quán)限將是完整的權(quán)限,應(yīng)用無需其他額外的任何權(quán)限,就可以任意的讀取、編輯刪除媒體文件和非媒體文件。

    • 如上做法,使得用戶就能獲得完整的控制權(quán),更好的管理應(yīng)用在何時(shí)訪問敏感的非媒體文件

    • Android 10中,自己的app無需任何權(quán)限就能向媒體集添加文件,同時(shí)也可以編輯和刪除自己添加的媒體文件。

    • 如果要讀取并操作并非自已的應(yīng)用所創(chuàng)建的媒體文件,就需要讀取外部存儲權(quán)限,如果用戶沒有同意,則應(yīng)用將無法編輯和刪除并非自己的應(yīng)用所創(chuàng)建的媒體文件。

    • 以上做法使得應(yīng)用想編輯和刪除媒體文件時(shí),用戶就能獲得完整的控制權(quán)

    • 媒體文件集∶用于和其它應(yīng)用分享媒體文件(圖片、音頻、視頻文件)

    • 下載文件集︰用于和其它應(yīng)用分享非媒體文件(非圖片、非音頻、非視頻文件)

    • 限制位置元數(shù)據(jù)∶對媒體文件中敏感的元數(shù)據(jù)進(jìn)行了訪問權(quán)限的限制,主要限制位置元數(shù)據(jù)

    • 媒體文件訪問路徑:Android 10鎖定了公共目錄文件路徑的權(quán)限。

    • MediaStore的強(qiáng)制性:文件需要在適當(dāng)?shù)哪夸涍M(jìn)行創(chuàng)建

  • Andriod10中的分區(qū)存儲小結(jié)

    • 特定于應(yīng)用的目錄->無需權(quán)限->訪問方法getExternalFilesDir () ->卸載應(yīng)用時(shí)移除文件

    • 媒體集合(照片、視頻、音頻)->需要權(quán)限READ_EXTERNAL_STORAGE(僅當(dāng)訪問其他應(yīng)用的文件時(shí))->訪問方法MediaStore ->卸載應(yīng)用時(shí)不移除文件

    • 下載內(nèi)容(文檔和電子書籍)->無需權(quán)限->存儲訪問框架(加載系統(tǒng)的文件選擇器)->卸載應(yīng)用時(shí)不移除文件


  • I/O流操作文件

    • FileInputStream openFileInput(String name)

    • FileOutputStream openFileOuput(String name,int mode)

    • 其中參數(shù)mode用于指定輸出流的模式

    • Android支持通過I/O流方式來訪問移動設(shè)備中的存儲文件

    • Context對象提供了openFileInput()和openFileOuput()方法分別來得文件的輸入流和輸出流︰


  • 讀寫SD卡文件

    SD卡 ( Secure Digital Memory Card )是一種基于半導(dǎo)體快閃記憶器的多功能存儲卡,具有大容量、高性能、安全高等多種特點(diǎn),被廣泛地用于便攜式移動設(shè)備,例如手機(jī)、數(shù)碼相機(jī)、PDA等。SD卡極大地?cái)U(kuò)充了手機(jī)的存儲能力。

    • 使用Environment.getExternalStorageState()方法判斷是否插入SD卡,且應(yīng)用程序具有讀寫SD卡的權(quán)限

    • 使用Environment.getExternalStorageDirectory()方法獲取SD卡的目錄

    • 使用文件輸入流(FileInputStream、FileReader )或輸出流(FileOutputStream、FileWriter )來讀寫SD卡中的文件

    • 讀寫SD卡文件時(shí),需要以下步驟︰


  • Android權(quán)限動態(tài)申請

    Google在Android 6.0開始引入了權(quán)限申請機(jī)制,將所有權(quán)限分成了正常權(quán)限和危險(xiǎn)權(quán)限。應(yīng)用的相關(guān)功能每次在使用危險(xiǎn)權(quán)限時(shí)需要?jiǎng)討B(tài)的申請并得到用戶的授權(quán)才能使用。

    • 正常權(quán)限︰不會直接給用戶隱私權(quán)帶來風(fēng)險(xiǎn)。如果你的應(yīng)用在其清單中列出了正常權(quán)限,系統(tǒng)將自動授予該權(quán)限。

    • 危險(xiǎn)權(quán)限︰會授予應(yīng)用訪問用戶機(jī)密數(shù)據(jù)的權(quán)限。如果你的應(yīng)用在其清單中列出了正常權(quán)限,系統(tǒng)將自動授予該權(quán)限。如果你列出了危險(xiǎn)權(quán)限,則用戶必須明確批準(zhǔn)您的應(yīng)用使用這些權(quán)限。

    • Android系統(tǒng)權(quán)限分為兩類∶

  • 重要方法:

    • ContextCompat.checkSelfPermission:檢查應(yīng)用是否具有某個(gè)危險(xiǎn)權(quán)限。如果應(yīng)用具有此權(quán)限,方法將返回PackageManager.PERMISSION_GRANTED,并且應(yīng)用可以繼續(xù)操作。如果應(yīng)用不具有此權(quán)限,方法將返回PackageManager.PERMISSION_DENIED,且應(yīng)用必須明確向用戶要求權(quán)限。

    • ActivityCompat.requestPermissions :應(yīng)用可以通過這個(gè)方法動態(tài)申請權(quán)限,調(diào)用后會彈出一個(gè)對話框提示用戶授權(quán)所申請的權(quán)限。

    • ActivityCompat.shouldShowRequestPermissionRationale :如果應(yīng)用之前請求過此權(quán)限但用戶拒絕了請求,此方法將返回true。如果用戶在過去拒絕了權(quán)限請求,并在權(quán)限請求系統(tǒng)對話框中選擇了Don't ask again選項(xiàng),此方法將返回false。如果設(shè)備規(guī)范禁止應(yīng)用具有該權(quán)限,此方法也會返回false。

    • onRequestPermissionsResult :當(dāng)應(yīng)用請求權(quán)限時(shí),系統(tǒng)將向用戶顯示一個(gè)對話框。當(dāng)用戶響應(yīng)時(shí),系統(tǒng)將調(diào)用應(yīng)用的onRequestPermissionsResult()方法,向其傳遞用戶響應(yīng),處理對應(yīng)的場景。


Android XML數(shù)據(jù)解析



  • Android中常見的三種XML解析方法︰

    • DOM DOM是基于樹形結(jié)構(gòu)的的節(jié)點(diǎn)或信息片段的集合,允許開發(fā)人員使用DOM API遍歷XML樹、檢索所需數(shù)據(jù)。分析該結(jié)構(gòu)通常需要加載整個(gè)文檔和構(gòu)造樹形結(jié)構(gòu),然后才可以檢索和更新節(jié)點(diǎn)信息。

    • SAX SAX(Simple API for XML)解析器是一種基于事件的解析器,它的核心是事件處理模式,主要是圍繞著事件源以及事件處理器來工作的。當(dāng)事件源產(chǎn)生事件后,調(diào)用事件處理器相應(yīng)的處理方法,一個(gè)事件就可以得到處理。

    • PULL PULL解析器的運(yùn)行方式和SAX類似,都是基于事件的模式。不同的是,在PULL解析過程中,我們需要自己獲取產(chǎn)生的事件然后做相應(yīng)的操作,而不像SAX那樣由處理器觸發(fā)一種事件的方法,執(zhí)行我們的代碼。

  • 三種XML解析方法的優(yōu)缺點(diǎn)及適用場景∶

    • DOM 由于DOM在內(nèi)存中以樹形結(jié)構(gòu)存放,因此檢索和更新效率會更高。但是對于特別大的文檔,解析和加載整個(gè)文檔將會很耗資源。

    • SAX SAX解析器的優(yōu)點(diǎn)是解析速度快,占用內(nèi)存少。非常適合在Android移動設(shè)備中使用。

    • PULL PULL解析器小巧輕便,解析速度快,簡單易用,非常適合在Android移動設(shè)備中使用,Android系統(tǒng)內(nèi)部在解析各種XML時(shí)也是用PULL解析器。


  • Pull解析器提供的事件類型總共有5種,分別如下:

    • START_DOCUMENT 文檔開始

    • START_TAG 開始元素

    • TEXT 文本

    • END_TAG 結(jié)束元素

    • END_DOCUMENT 文檔結(jié)束

  • 使用PulI解析器XmIPullParser解析XML文檔時(shí),常用方法∶

    • int getAttributeCount(); 獲取當(dāng)前元素的屬性個(gè)數(shù)

    • String getAttributeValue(int index); 獲取屬性值

    • int getEventType); 獲取事件類型

    • string getName(); 用于START_TAG和END_TAG事件中,獲取當(dāng)前元素的名字

    • int next(); 處理下一個(gè)元素

    • int nextText(); 用于START_TAG事件中,獲得下一個(gè)TEXT類型的元素

  • 可以通過以下兩個(gè)步驟創(chuàng)建一個(gè)Pull解析器∶

    • 通過調(diào)用XmIPullParserFactory工廠類的newInstance()方法,創(chuàng)建一個(gè)Pull解析器工廠對象。

    • 通過調(diào)用Pull解析器工廠對象的newPullParser()方法,創(chuàng)建一個(gè)Pull解析器對象。

  • Pull解析器對象創(chuàng)建之后,可以通過其setInput()方法傳入要解析的XML文檔。setInput()方法提供了兩種重載的形式:

    • void setInput(Reader in);

    • void setInput(InputStream inputStream, String inputEncoding);


SharePreferences接口

  • SharedPreferences能夠保存簡單格式的數(shù)據(jù),主要用于類似配置信息格式的數(shù)據(jù),這些數(shù)據(jù)以key-value形式存儲在XML文件中。

  • 使用SharedPreferences方式存儲數(shù)據(jù)時(shí)需要用到SharedPreferences和SharedPreferences.Editor接口

  • SharedPreferences常用方法


  • Context對象的getSharedPreferences(String name,int mode)方法獲取SharedPreference對象參數(shù)mode用于設(shè)定文件的操作模式,取值可以是三種︰

    • Context.MODE_WORLD_READABLE(可讀)

    • Context.MODE_WORLD_WRITEABLE(可寫)

    • Context.MODE_PRIVATE(私有)

  • 使用SharedPreferences進(jìn)行數(shù)據(jù)操作時(shí),操作步驟︰

    • 使用getSharedPreferences()方法獲取一個(gè)SharedPreferences實(shí)例對象

    • 使用SharedPreferences實(shí)例對象的edit()方法,獲取SharedPreferences.Editor編輯對象

    • 使用SharedPreferences.Editorr編輯對象的putXxx()方法來保存數(shù)據(jù)

    • 使用SharedPreferences.Editor編輯對象的commit()方法將數(shù)據(jù)提交到XML文件中

    • 使用SharedPreferences對象的getXxx()方法來讀取數(shù)據(jù)



SQLite數(shù)據(jù)庫

  • sQLite是一種免費(fèi)、開源的輕量級數(shù)據(jù)庫,Android系統(tǒng)集成了sQLite

  • sQLite數(shù)據(jù)庫具有以下幾個(gè)特征:

    • 輕量級

    • 獨(dú)立

    • 操作簡單

    • 便于管理和維護(hù)

    • 可移植性

    • 語言無關(guān)

    • 事務(wù)性


  • sQLiteDatabase對象打開數(shù)據(jù)庫的方法∶

    • openDatabase(String path, SQLiteDatabase.CursorFactory factory, intflags)∶打開path所指定的SQLite數(shù)據(jù)庫

    • openOrCreateDatabase(String path,SQLiteDatabase.CursorFactoryfactory)∶打開或創(chuàng)建(如果文件不存在) path所指定的SQLite數(shù)據(jù)庫

    • openOrCreateDatabase(File file,SQLiteDatabase.CursorFactoryfactory)∶打開或創(chuàng)建(如果文件不存在) file所指定的SQLite數(shù)據(jù)庫


  • 創(chuàng)建或打開數(shù)據(jù)庫

    • path用于指定數(shù)據(jù)庫的路徑,若指定的數(shù)據(jù)庫不存在,則拋出FileNotFoundException異常

    • factory用于構(gòu)造查詢時(shí)的游標(biāo),若factory為null,則表示使用默認(rèn)的factory構(gòu)造游標(biāo)

    • flags指定了數(shù)據(jù)庫打開的模式,SQLite定義了4種數(shù)據(jù)庫打開模式:

    • OPEN_READONLY(只讀)

    • OPEN_READWRITE(可讀可寫)

    • CREATE_IF_NECESSARY(若數(shù)據(jù)庫不存在先創(chuàng)建數(shù)據(jù)庫)

    • NO_LOCALIZED_COLLATORS(不按照本地化語言對數(shù)據(jù)進(jìn)行排序)

    • 使用openDatabase()方法打開指定的數(shù)據(jù)庫時(shí),需要三個(gè)參數(shù)∶

    • 使用openDatabase()方法打開指定的數(shù)據(jù)庫

      ?sQLiteDatabase sqliteDatabase = sQLiteDatabase.openDatabase ( "qst_student. db", null,NO_LOCALIZED_COLLATORS);
      ?
    • 使用openOrCreateDatabase()方法打開或創(chuàng)建指定的數(shù)據(jù)庫

      ?sQLiteDatabase sqliteDatabase = sQLiteDatabase.openorCreateDatabase ("qst_student.db", null);
      ?
    • 使用deleteDatabase()方法刪除數(shù)據(jù)庫

      ?deleteDatabase ("qst_student.db" );//刪除數(shù)據(jù)庫qst_student. db
      ?
    • 使用close()方法關(guān)閉數(shù)據(jù)庫

      ?sqliteDatabase.close();//關(guān)閉數(shù)據(jù)庫,sqliteDatabase是一個(gè)實(shí)例對象
      ?
    • 使用execSQL()方法創(chuàng)建表

      ?//創(chuàng)建表的sQL語句
      ?string sql="CREATE TABLE student(ID INTEGER PRIMARY KEY,age INTEGER,name TEXT) ";
      ?//執(zhí)行該sQL語句創(chuàng)建表
      ?sqliteDatabase.execSQL ( sql) ;
      ?
    • 使用execSQL()方法刪除表

      ?l//創(chuàng)建表的sQL語句
      ?string sql= "CREATETABLE student(ID INTEGER PRIMARY KEY,age INTEGER,name TEXT)";
      ?//執(zhí)行該sQL語句創(chuàng)建表
      ?sqliteDatabase.execsQL (sql) ;
      ?
    • 使用insert()方法插入記錄

      ?contentValues contentValues = new Contentvalues ( ) ;contentValues.put ("ID",1);
      ?contentValues.put ( "age",26);
      ?contentValues.put ( "name" , "studentA" ) ;
      ?//調(diào)用insert()方法將contentvalues對象封裝的數(shù)據(jù)插入到student表中sqliteDatabase.insert ("student" , null,contentvalues) ;
      ?
    • 使用execSQL()方法插入記錄

      ?//定義插入sQL語句
      ?string sql= "INSERT INTo student (ID,age, name) values (1,26,'studentA ' ) ";//調(diào)用execsQL ()方法執(zhí)行sQL語句,將數(shù)據(jù)插入到student表中
      ?sqliteDatabase.execSQL(sql);
      ?
    • 使用execSQL()方法刪除記錄

      ?//定義更新sQL語句
      ?string sql= "DELETE FORM student where name='StudentA' ";//調(diào)用execsQL()方法執(zhí)行sQL語句更新student表中的記錄
      ?sqliteDatabase.execsQL(sql);
      ?


  • 事務(wù)處理

    • beginTransaction()方法用于開始事務(wù)

    • endTransaction()方法用于結(jié)束事務(wù)

    • inTransaction()方法用于判斷當(dāng)前上下文是否處于事務(wù)環(huán)境中

    • setTransactionSuccessful()方法來設(shè)置事務(wù)成功標(biāo)志

    • sQLiteDatabase提供以下幾個(gè)方法來控制事務(wù)∶


  • SQLite0penHelper類

    • sQLiteOpenHelper是SQLiteDatabase的幫助類,用來管理數(shù)據(jù)庫的創(chuàng)建和版本更新

    • 通過繼承SQLiteOpenHelper類可以隱藏開發(fā)過程中不需要直接調(diào)用的方法



數(shù)據(jù)存儲的評論 (共 條)

分享到微博請遵守國家法律
即墨市| 万源市| 乐亭县| 油尖旺区| 郧西县| 扎赉特旗| 宝应县| 武邑县| 宣威市| 宣武区| 佛学| 镇巴县| 隆德县| 原平市| 武强县| 长沙市| 石首市| 象山县| 新丰县| 马关县| 东丰县| 嫩江县| 抚宁县| 新建县| 玉山县| 将乐县| 南安市| 四平市| 沙坪坝区| 准格尔旗| 阜新| 浮山县| 什邡市| 钟祥市| 集安市| 安阳县| 永靖县| 墨竹工卡县| 桂林市| 辽宁省| 海宁市|