SQLite提供了強大的SQL數據庫的庫文件,從而使應用程序擁有一個具有徹底控制權的健壯的持久化層。java
Content Provider實如今應用程序內和應用程序之間存儲、共享和使用結構化數據。經過將數據存儲層和應用層分離,Content Provider爲各類數據源提供了一個通用的接口(用來發布數據)。sql
Android經過結合使用SQLite數據庫和Content Provider,提供告終構化數據的持久化功能。每一個應用程序均可以建立本身的數據庫,並對真個數據庫擁有徹底的控制權。建立了底層數據存儲以後,就可使用Content Provider,經過底層數據源執行了一致的抽象,爲使用和共享數據提供了一種通用的、定義良好的接口。數據庫
使用SQLite能夠爲應用程序建立徹底封裝的關係數據庫。使用這些數據庫能夠存儲和管理複雜的、結構化的應用程序數據。Android數據庫存儲在設備上的/data/data/<pacage_name>/databases文件夾中。全部的數據庫都是私有的,只能被建立它們的應用程序訪問。緩存
Content Provider提供了一種基於使用content:://模式的簡單URI尋址模型來發布和使用數據的接口。它們容許將應用層從底層數據層中分離出來,經過抽象底層數據源使應用程序沒必要依賴於某個數據源。異步
SQLite更全面的使用:http://www.sqlite.org/數據庫設計
ContentValue和Cursor類ide
在使用數據庫時,最好的作法是講底層數據庫封裝起來,只公開與該數據庫進行交互時必須使用的公有方法和常量,這通常會用到一般所謂的合同或輔助類。這個類應該公開數據庫常量,特別是列明,填充和查詢數據庫時必須使用列名。spa
public class ManagerDemo { // where子句中使用的索引列的名稱 public static final String KEY_ID = "_id"; // 數據庫中每一個列的列名和索引,爲表中的每一個列建立一個公有字段 public static final String KEY_GOLD_HOARD_NAME_COLUME = "GOLD_HOARD_NAME_COLUME"; public static final String KEY_GOLD_HOARD_ACCESSIBLE_COLUMN = "GOLD_HOARD_ACCESSIBLE_COLUMN"; public static final String KEY_GOLD_HOARDED_COLUMN = "GOLD_HOARDED_COLUMN"; }
SQLiteOpenHelper是一個抽象類,用來實現建立、打開和升級數據庫的最佳實踐模式。經過實現SQLiteOpenHelper類,能夠隱藏那些用於決定一個數據庫在打開以前是否須要建立或者升級的邏輯。等到須要數據庫時再建立和打開這些數據庫時一種好的實踐作法。SQLiteOpenHelper會在成功打開數據庫實例後緩存它們,因此能夠在恰好要執行查詢或事務前請求打開數據庫。處於相同的緣由,除非再也不須要使用數據庫,不然無需手動關閉。(數據庫操做(特別是打開或建立數據庫的操做)須要很長的時間才能完成,所以爲了這些操做不會影響用戶體驗,應使全部數據庫事務異步執行)。既然提到了會緩存數據庫實例,必然地會佔用內存空間。(使用SQLiteOpenHelper實現打開了一個數據庫實例。SQLiteHelper將數據庫實例的建立和打開操做延遲到了第一次須要該數據庫的時候,並在成功打開數據庫實例後緩存它們)設計
Android數據庫設計注意事項:當專門爲Android設計數據庫時,須要考慮如下幾點sqlite
1. 文件(如位圖或者音頻文件)一般是不存儲在數據庫的表中的。應該使用一個字符串來存儲文件的路徑,固然,使用一個徹底限定的URI來存儲文件的路徑效果會更好。
2. 強烈建議全部的表都應該包含一個自動增長的鍵字段,做爲每一行的惟一索引字段。若是計劃使用Content Provider來共享表,就必須具備惟一的ID字段。
要想在表中支持文件,必須包含一個名爲_data的列,它含有這條記錄所表示的文件的路徑。該列不該該被客戶端應用程序所使用。