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

数据库和Content Provider的更多相关文章

  1. 我的Android 4 学习系列之数据库和Content Provider

    目录 创建数据库和使用SQLite 使用Content Provider.Cusor和Content Value来存储.共享和使用应用程序数据 使用Cursor Loader异步查询Content P ...

  2. Android开发(7)数据库和Content Provider

    问题聚焦: 思想:应用程序数据的共享 对数据库的访问仅限于创建它的应用程序,但是事情不是绝对的 Content Provider提供了一个标准的接口,可供其他应用程序访问和使用其他程序的数据 下面我们 ...

  3. Android Content Provider Guides

    Android Content Provider Guides Content Providers管理对结构化数据集的访问.它们包装数据,并且提供一种定义数据安全的机制. Content provid ...

  4. Android 内容提供器(Content Provider)介绍

    内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性.目前,使用内容 ...

  5. Android学习五:Content Provider 使用

    1ContentProvider相关知识1.1在安卓应用中,通过文件方式对外共享数据,需要进行文件操作读写数据:采用sharedpreferences共享数据,需要使用sharedpreference ...

  6. 1.3 Content Provider

    ContentProvider向我们提供了我们在应用程序之间共享数据的一种机制,分为系统的和自定义的,系统的也就是例如联系人,图片等数据. 使用方式:一个应用实现ContentProvider来提供内 ...

  7. Android应用安全之Content Provider安全

    android平台提供了Content Provider,将一个应用程序的指定数据集提供给其它应用程序.这些数据可以存储在文件系统.SQLite数据库中,或以任何其它合理的方式存储.其他应用可以通过C ...

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

    Android数据的四种存储方式SharedPreferences.SQLite.Content Provider和File (一) —— 总览   作为一个完成的应用程序,数据存储操作是必不可少的. ...

  9. Android Contacts (android通讯录读取)-content provider

    Content Provider 在数据处理中,Android通常使用Content Provider的方式.Content Provider使用Uri实例作为句柄的数据封装的,很方便地访问地进行数据 ...

随机推荐

  1. #1 macos和windows下对多Python环境配置的记录

    为啥会发现环节配置的问题 因为scrapy的setting前期走弯路的时候,碰到了修改了Windows下的Python中的scrapy的默认setting,但是我电脑上还有anaconda,而且我是使 ...

  2. fhq treap

    学了一下,好像明白了(背下来了) 不想写main函数了 PS:这个比treap好写(私以为) #include<bits/stdc++.h> using namespace std; in ...

  3. vue组件创建的三种方式

    1.使用Vue.extend创建全局的Vue组件 //1.1 使用vue.extend创建组件 var com1 = Vue.extend({ //通过template属性指定组件要展示的html结构 ...

  4. jenkins+supervisor实现django项目的自动部署(ubuntu)

    没有安装supervisor的话首先安装supervisor, apt install upservisor 安装supervisor大概率会出现问题,不推荐,最好是用pip 安装, 注意python ...

  5. 开发一个项目之css

    background属性 5+3 image,color,position,repeat,attachment size: 保持纵横比 contain 再发大就cover了 clip:背景绘制区域 b ...

  6. js一些格式化

    /* 格式化金额 */function formatAmount(s, n) {      n = n > 0 && n <= 20 ? n : 2;      s = p ...

  7. 分布式系列十五: MongoDB数据库

    MongoDB 是基于分布式文件存储的数据库. 开发语言是C++. 具有高性能,可扩展的特点. 是NoSql中最像关系数据库的. 什么是NoSql NoSQL 是 Not only SQL 的缩写. ...

  8. 最新传智播客web前端开发39期视频教程【完整版】

    本套视频为传智2018web前端开发全套视频教程基础班+就业班,视频+源码+案例笔记,全套高清不加密~2018最新传智播客视频! 本教程是实战派课程!为传智最新web前端39期,挑战全网最全视频,没有 ...

  9. 项目Alpha冲刺(团队)-代码规范、冲刺任务与计划

    课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队)-代码规范.冲刺任务与计划 团队名称:SkyReach 作业目标:确定团队项目的代码规范.冲刺任务与计划 代码规范:隐流 ...

  10. js创建1-100的数组

    //实现方法一:循环赋值var arr1 = new Array(100);for(var i=0;i<arr1.length;i++){ arr1[i] = i;}console.log(ar ...