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的列,它含有这条记录所表示的文件的路径。该列不该该被客户端应用程序所使用。