android数据存储

原创 2015年11月19日 09:54:03

本文介绍Android中的5种数据存储方式。

数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是:

1 使用SharedPreferences存储数据

2 文件存储数据

3 SQLite数据库存储数据

4 使用ContentProvider存储数据

5 网络存储数据



SharedPreferences存储

采用键值对的方式来存储数据,将数据保存在一个XML配置文件中(XML文件保存在路径/data/data/package/shared_prefs/下是一个轻量级的键值存储机制,只可以存储基本数据类型。

获取SharedPreferences的两种方式: 
1 调用Context对象的getSharedPreferences()方法 
2 调用Activity对象的getPreferences()方法 
两种方式的区别: 
调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享. 
调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用.

SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容 
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件. 
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件. 
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取. 

MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入. 


得到SharedPreferences对象之后,分三步实现数据存数 

1 调用SharedPreferences对象的方法edit(),获取SharedPreferences.Editor对象 
2 SharedPreferences.Editor对象中添加数据,put….. 

3 调用commit()方法,将添加的数据提交 


SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。



File存储

Android中,你还可以使用Context对象的openFileOutput()和openFileInput()来进行数据持久化存储的这种方式, 

Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。

文件可用来存放大量数据,如文本、图片、音频等。

你的数据文件将存储在内部存储空间的/data/data/你的应用程序的包名package/files/目录下,无法指定更深一级的目录, 
而且默认是Context.MODE_PRIVATE模式,即别的应用程序不能访问它。 
你可以使用openFileOutput()的int mode参数来让别的应用程序也能访问你的文件。 一个应用程序无法读写其他应用程序的文件,如果要共享数据就用Content Provider。FileOutputStream outStream=this.openFileOutput("a.txt",Context.MODE_WORLD_READABLE);
outStream.write(text.getText().toString().getBytes());


默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/<package name>/files),其他程序无法访问。

除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有这样其他程序才能正确访问。



把文件存入SDCard:

使用Activity的openFileOutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的。对于像视频这样的大文件,我们可以把它存放在SDCard。 

SDCard是干什么的?你可以把它看作是移动硬盘或U盘。



SQLite 数据库

Android提供的一个轻量级标准的数据库,支持SQL 语句。

SQLite是轻量级的关系型数据库,Android中通过SQLite数据库引擎来实现结构化数据存储。

主要使用的两个类为SQLiteDatabase,SQLiteOpenHelper

SQLiteDataBase代表一个数据库对象,提供了操作数据库的方法;另外Android的SDK目录下有sqlite3工具,我们可以利用该工具来创建数据库、表,和执行以下SQL语句。只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper是SQLiteDatabase的一个帮助类,内有两个抽象方法onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)用来创建、更新数据库。

SQLiteOpenHelper 的子类,至少需要实现三个方法:

1 构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。

2 onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。

3 onUpgrage()方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。


调用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 实例,具体调用那个方法,取决于你是否需要改变数据库的内容:

db=(new DatabaseHelper(getContext())).getWritableDatabase();
上面这段代码会返回一个 SQLiteDatabase 类的实例,使用这个对象,你就可以查询或者修改数据库。 当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。 创建表和索引 为了创建表和索引,需要调用 SQLiteDatabase 的 execSQL() 方法来执行 DDL 语句。如果没有异常,这个方法没有返回值。

例如,你可以执行如下代码:

db.execSQL("CREATE TABLE mytable (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, value REAL);");

这条语句会创建一个名为 mytable 的表,表有一个列名为 _id,并且是主键,这列的值是会自动增长的整数(例如,当你插入一行时,SQLite 会给这列自动赋值),另外还有两列:title( 字符 ) 和 value( 浮点数 )。 SQLite 会自动为主键列创建索引。 通常情况下,第一次创建数据库时创建了表和索引。

如果你不需要改变表的 schema,不需要删除表和索引 . 删除表和索引,需要使用 execSQL() 方法调用 DROP INDEX 和 DROP TABLE 语句。 给表添加数据 上面的代码,已经创建了数据库和表,现在需要给表添加数据。有两种方法可以给表添加数据。

像上面创建表一样,你可以使用 execSQL() 方法执行 INSERT, UPDATE, DELETE 等语句来更新表的数据。execSQL() 方法适用于所有不返回结果的 SQL 语句。




SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。

特点:

面向资源有限的设备,

没有服务器进程,

所有数据存放在同一文件中跨平台,

可自由复制。



Content Provider 内容提供者

是所有应用程序之间数据存储和检索的桥梁,它的作用是使得各个应用程序之间实现数据共享。

一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。也就是说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去。外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或者是用数据库存储还是用文件存储,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和程序里的数据打交道,可以读取程序的数据,也可以删除程序的数据,当然,中间也会涉及一些权限的问题。

一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProviders是以类似数据库中表的方式将数据暴露,也就是说ContentProvider就像一个“数据库”。那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URI来表示外界需要访问的“数据库”。



网络存储方式

前面介绍的几种存储都是将数据存储在本地设备上,除此之外,还有一种存储(获取)数据的方式,通过网络来实现数据的存储和获取。

我们可以调用WebService返回的数据或是解析HTTP协议实现网络数据交互。


版权声明:本文为博主原创文章,未经博主允许不得转载。

安卓数据存储总结及详解

前言(首先说说什么存储的几个概念) 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清...
  • qq_27280457
  • qq_27280457
  • 2016年06月30日 09:27
  • 2603

解读Android之数据存储方案

Android提供了一些永久保存数据的方法,可以根据具体的需求决定使用哪种方式存储,例如私有数据,外部程序是否可以访问等等。有以下几种方法存储:Shared Preferences;Internal ...
  • wangyongge85
  • wangyongge85
  • 2015年09月09日 08:54
  • 57716

Android网络与数据存储01

概要:这次制作App的引导页,主要用到2个知识“SharedPreferences 和 ViewPager” Genymotion的Android模拟器,版本5.1.0以下是默认root的,可以使用R...
  • xiejun188
  • xiejun188
  • 2016年08月09日 20:44
  • 295

Android数据存储几种方式用法总结

Android数据存储几种方式用法总结 1、概述   Android提供了5种方式来让用户保存持久化应用程序数据。根据自己的需求...
  • xiyiyindie
  • xiyiyindie
  • 2016年12月11日 12:16
  • 1489

实验任务8 Android数据存储和访问---书籍的增删改查

本次实验的任务是实现书籍的增删改查,其实我们可以对数据进行的操作也就无非四种,即CRUD。其中C代表添加(Create),R代表查询(Retrieve),U代表更新(Update),D代表删除(Del...
  • bzwulian
  • bzwulian
  • 2016年11月16日 21:30
  • 259

Android实验七之SQLite数据库存储

实验效果图: LogCat中打印出的数据:   代码:   MainActivity.java package com.example.sqlist; import com.example....
  • seven08290
  • seven08290
  • 2016年11月19日 18:59
  • 511

Android学习笔记十二.Android数据存储与IO.SharedPreferences

SharedPreferences     对于应用程序的数据输入、输出,如果是应用程序只是少量数据需要保存,那么使用普通文件就可以了(SharedPrefereces);但如果应用程序有大量数据需要...
  • u012637501
  • u012637501
  • 2015年01月07日 21:35
  • 1119

android的五种存储机制

Android提供了5种方式存储数据: --使用SharedPreferences存储数据; --文件存储数据;  --SQLite数据库存储数据; --使用ContentProvider存储...
  • heminghung
  • heminghung
  • 2016年05月29日 14:26
  • 831

Android 数据存储五种方式使用与总结

部分内容来源于官方文档翻译, 对SharedPreferences; 文件存储(内部存储读写,保存编译文件,保存内存缓存文件,外部存储读写); SQLite使用; ContentProvider使用;...
  • Amazing7
  • Amazing7
  • 2016年05月18日 16:06
  • 30101

Android中数据储存方式的几种工具类

一.在Android开发中数据的存储方式有五种:   1.使用SharedPreferences进行存储:      适用范围存储小量的数据,储存的格式有字符串类型及基本数据类型。一般用于存储应用程序...
  • wangyongyao1989
  • wangyongyao1989
  • 2017年04月15日 12:55
  • 475
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android数据存储
举报原因:
原因补充:

(最多只允许输入30个字)