数据库和Content Provider

SQLite提供了强大的SQL数据库的库文件,从而使应用程序拥有一个具备完全控制权的健壮的持久化层。

Content Provider实现在应用程序内和应用程序之间存储、共享和使用结构化数据。通过将数据存储层和应用层分离,Content Provider为各种数据源提供了一个通用的接口(用来发布数据)。

Android通过结合使用SQLite数据库和Content Provider,提供了结构化数据的持久化功能。每个应用程序都可以创建自己的数据库,并对真个数据库拥有完全的控制权。创建了底层数据存储之后,就可以使用Content Provider,通过底层数据源执行了一致的抽象,为使用和共享数据提供了一种通用的、定义良好的接口。

使用SQLite可以为应用程序创建完全封装的关系数据库。使用这些数据库可以存储和管理复杂的、结构化的应用程序数据。Android数据库存储在设备上的/data/data/<pacage_name>/databases文件夹中。所有的数据库都是私有的,只能被创建它们的应用程序访问。

Content Provider提供了一种基于使用content:://模式的简单URI寻址模型来发布和使用数据的接口。它们允许将应用层从底层数据层中分离出来,通过抽象底层数据源使应用程序不必依赖于某个数据源。

SQLite更全面的使用:http://www.sqlite.org/

ContentValue和Cursor类

在使用数据库时,最好的做法是讲底层数据库封装起来,只公开与该数据库进行交互时必须使用的公有方法和常量,这一般会用到通常所谓的合同或辅助类。这个类应该公开数据库常量,特别是列明,填充和查询数据库时必须使用列名。

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设计数据库时,需要考虑以下几点

1. 文件(如位图或者音频文件)通常是不存储在数据库的表中的。应该使用一个字符串来存储文件的路径,当然,使用一个完全限定的URI来存储文件的路径效果会更好。

2. 强烈建议所有的表都应该包含一个自动增加的键字段,作为每一行的唯一索引字段。如果计划使用Content Provider来共享表,就必须具有唯一的ID字段。

要想在表中支持文件,必须包含一个名为_data的列,它含有这条记录所表示的文件的路径。该列不应该被客户端应用程序所使用。

时间: 2024-10-01 02:54:53

数据库和Content Provider的相关文章

Android开发- 数据库和Content Provider

SQLiteOpenHelper SQLiteOpenHelper是一个抽象类,用来实现创建.打开和升级数据库的最佳实践模式. private static class HoardDBOpenHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "myDatabase.db"; private static final String DATABASE_TABLE = "Gol

Android学习总结——Content Provider

原文地址:http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html Content Provider内容提供者 : android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序.这些数据可以存储在文件系统中.在一个SQLite数据库.或以任何其他合理的方式, 其他应用可以通过ContentResolver类(见ContentProviderAccessApp例子)从该内容提供者中

Android四大基本组件(2)之Service 服务与Content Provider内容提供者

一.Service 服务: 一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序. 比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器.在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲.然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的.在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从

android学习十二(android的Content Provider(内容提供器)的使用)

文件存储和SharePreference存储以及数据存储一般为了安全,最好用于当前应用程序中访问和存储数据.内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性.目前使用内容提供器是android实现跨程序共享数据的标准方式.内容提供器可以选择只对一部分数据进行共享,从而保证我们的程序中的隐私数据不会有泄漏的风险. 内容提供器的用法一般有两种,一种是使用现有的内容提

android笔记 : Content provider内容提供器

内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能. 内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序中的数据,另一种是创建自己的内容提供器给我们程序的数据提供外部访问接口. 第一种方法:使用ContentResolver来读取和操作相应程序中的数据 1.用parse方法将内容 URI 字符串解析成 Uri 对象. uri(Uniform Resource identifier)指的是统一资源标识符Uri uri = Uri .

Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览

Android数据的四种存储方式SharedPreferences.SQLite.Content Provider和File (一) —— 总览 作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放于“data/data/程序包名”目录下,所以要实现数据共享,正确方式是使用Content Pro

Android学习笔记(四七):Content Provider初谈和Android联系人信息

Content Provider 在数据处理中,Android通常使用Content Provider的方式.Content Provider使用Uri实例作为句柄的数据封装的,很方便地访问地进行数据的增.删.改.查的操作.Android并不提供所有应用共享的数据存储,采用content Provider,提供简单便捷的接口来保持和获取数据,也可以实现跨应用的数据访问.简单地说,Android通过content Provider从数据的封装中获取信息. Content provider使用Uri

应用解析Content Provider

Content Provider Android中每一个应用程序都运行在各自的进程中,当一个应用需要返回其他应用的数据时,也就是需要数据在不同的虚拟机之间传递,所以Google引入了Content Provider(内容提供者)来解决不同应用包之间的数据共享 在Android中content Provider是一个特殊的存储数据类型,它提供了一套标准的接口用来获取和操作数据, Android自身也是提供了contentprovider:contacts,Brower,CallLog,MediaS

Android学习笔记(四八):提供自己的Content Provider

在上一次的学习中,采用了原生的内容提供者Contact,Contact有多层映射关系,比较复杂,并非作为小例子的好选择,在本次学习中,我们将学习如何建立Content Provider,并通过Uri进行增删改查.如果应用的数据只需自己使用,并不需要content provider,相反避免这样做,可直接访问数据:但是若希望数据可以被其他应用访问,创建content provider就是常规手段. 再谈Content Provider的Uri 在上一次学习中,我们谈到了Uri的格式.现在已cont