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

转载于:https://www.cnblogs.com/CVstyle/p/6395842.html

数据库和Content Provider相关推荐

  1. Android应用程序组件Content Provider的启动过程源代码分析(6)

        Step 17. ActivityThread.installProvider         这个函数定义在frameworks/base/core/java/android/app/Act ...

  2. Android应用程序组件Content Provider的共享数据更新通知机制分析(3)

            3. 数据更新通知的发送过程        在前面这篇文章Android应用程序组件Content Provider应用实例介绍的应用程序Acticle中,当调用ArticlesAda ...

  3. 基础篇:7.Content provider与Content Resolver实现数据共享

    前言: 文件数据.数据库数据以及一些其它类型的数据在android中都是私有的,在android中,并没有提供所有应用共同访问的公共储存区域.但各应用程序间通常需要进行数据共享,如联系人信息等. 在a ...

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

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

  5. Android应用程序组件Content Provider简要介绍和学习计划

    在Android系统中,Content Provider作为应用程序四大组件之一,它起到在应用程序之间共享数据的作用,同时,它还是标准的数据访问接口.前面的一系列文章已经分析过Android应用程序的 ...

  6. Content Provider之一大菊观

    题记:这篇是对content provider的一个全局的认识篇,包括一些基本概念和用法,故而借用下大酒神的大菊观附体~ 主要包括以下几个方面: provider执行原理以及相关的概念: 通过prov ...

  7. Android应用程序组件Content Provider在应用程序之间共享数据的原理分析(2)

        Step 7. ContentProviderProxy.query       这个函数定义在frameworks/base/core/java/android/content/Conten ...

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

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  9. Content Provider 基础 之URI

    Keywords: content provider, URI Content Provider这个东西在Android平台上是最常用的共享数据的方法(似乎应用程序之间共享数据也只有这种方法吧,待求证 ...

  10. android contentprovider api,Content Provider Basics

    一个内容提供者访问数据的中央资源库.提供者是应用程序的一部分,提供自己的操作数据的UI.然而,内容提供者主要是被其他应用程序引用,通过提供者客户对象访问提供者.提供者和提供者客户端为数据提供一个一致的 ...

最新文章

  1. 王者又连跪了?快让 AI 帮你上分!
  2. IDEA maven项目查自动查看依赖关系,解决包冲突问题
  3. 大数据的逆袭:传统数据库市场的变革
  4. 为什么要重构,何时进行重构
  5. 初步学习Django-第八篇:ORM常用操作
  6. 【出版直播】博客园征途系列,《设计模式——基于C#的工程化实现及扩展》定价修改...
  7. 检测UDP端口是否开放的命令
  8. origin游戏下载一直显示准备中的解决方法
  9. 雨林木风Ghost XP SP3 装机版 YN9.9 九月修正版 【雪豹】
  10. w ndows10卸载word,windows10系统下怎样卸载office 2003
  11. 2009年全国数模比赛,江苏三等奖名单
  12. fprintf用法解析
  13. 直播预告更新 | 火爆全网的ChatGPT为什么这么强?
  14. 从四个维度谈谈如何做好团队管理
  15. 腾讯秋招面经(WXG一面+面委一面+面委二面)
  16. 浅谈Robots.txt文件给网站带来的好处
  17. 使用三方框架FlashView在自己的项目中实现图片轮播
  18. uni-app 实现定点签到功能
  19. 五子棋等级考试软件的开发(六)
  20. python两人一碰_用Python实现经典90坦克大战(支持单双人模式)

热门文章

  1. visual studio 中将选中代码相同的代码的颜色设置,修改高亮颜色
  2. 利用反射和元数据编写的通用更新和通用查询
  3. HttpServletResponse response详解
  4. 怎样修复电动车电瓶。
  5. 软件工程第一次作业程序开发历程
  6. Swift - 二进制,八进制,十六机制的表示方法
  7. U3D关于message的使用
  8. 细说Redirect重定向请求(情节分享)
  9. c1flexGrid 在单元格中显示图片, 及行号
  10. spring session 考虑问题解答