Android開發_Android數據的四種存儲方式

Android系統一共提供瞭四種數據存儲方式。分別是:SharePreference、SQLite、Content Provider和File。由於Android系統中,數據基本都是私有的的,都是存放於“data/data/程序包名”目錄下,所以要實現數據共享,正確方式是使用Content Provider。

 

  SQLite: SQLite是一個輕量級的數據庫,支持基本SQL語法,是常被采用的一種數據存儲方式。Android為此數據庫提供瞭一個名為SQLiteDatabase的類,封裝瞭一些操作數據庫的API。

 

  SharedPreference: 除SQLite數據庫外,另一種常用的數據存儲方式,其本質就是一個xml文件,常用於存儲較簡單的參數設置。

 

  File: 即常說的文件(I/O)存儲方法,常用語存儲大數量的數據,但是缺點是更新數據將是一件困難的事情。

 

  ContentProvider: Android系統中能實現所有應用程序共享的一種數據存儲方式,由於數據通常在各應用間的是互相私密的,所以此存儲方式較少使用,但是其又是必不可少的一種存儲方式。例如音頻,視頻,圖片和通訊錄,一般都可以采用此種方式進行存儲。每個Content Provider都會對外提供一個公共的URI(包裝成Uri對象),如果應用程序有數據需要共享時,就需要使用Content Provider為這些數據定義一個URI,然後其他的應用程序就通過Content Provider傳入這個URI來對數據進行操作。

 

 

 

PS: URI由3個部分組成:"content://"、數據的路徑、標識ID(可選)。

 

 

SQLite是一種轉為嵌入式設備設計的輕型數據庫,其隻有五種數據類型,分別是:

 

    NULL: 空值

 

    INTEGER: 整數

 

    REAL: 浮點數

 

    TEXT: 字符串

 

    BLOB: 大數據

 

  在SQLite中,並沒有專門設計BOOLEAN和DATE類型,因為BOOLEAN型可以用INTEGER的0和1代替true和false,而DATE類型則可以擁有特定格式的TEXT、REAL和INTEGER的值來代替顯示,為瞭能方便的操作DATE類型,SQLite提供瞭一組函數,詳見:https://www.sqlite.org/lang_datefunc.html。這樣簡單的數據類型設計更加符合嵌入式設備的要求。關於SQLite的更多資料,請參看:https://www.sqlite.org/

 

  在Android系統中提供瞭android.database.sqlite包,用於進行SQLite數據庫的增、刪、改、查工作。其主要方法如下:

 

  beginTransaction(): 開始一個事務。

 

  close(): 關閉連接,釋放資源。

 

  delete(String table, String whereClause, String[] whereArgs): 根據給定條件,刪除符合條件的記錄。

 

  endTransaction(): 結束一個事務。

 

  execSQL(String sql): 執行給定SQL語句。

 

  insert(String table, String nullColumnHack, ContentValues values): 根據給定條件,插入一條記錄。 

 

  openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory): 根據給定條件連接數據庫,如果此數據庫不存在,則創建。

 

  query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy): 執行查詢。

 

  rawQuery(String sql, String[] selectionArgs): 根據給定SQL,執行查詢。

 

  update(String table, ContentValues values, String whereClause, String[] whereArgs): 根據給定條件,修改符合條件的記錄。

 

  除瞭上訴主要方法外,Android還提供瞭諸多實用的方法,總之一句話:其實Android訪問數據庫是一件很方便的事兒。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *