前言

学习Android相关知识,数据存储是其中的重点之一,如果不了解数据,那么让你跟一款没有数据的应用玩,你能玩多久呢?答案是这和没有手机几乎是差不多的。我们聊QQ,聊微信,看新闻,刷朋友圈等都是看里面的数据,所以在Android中数据对我们是多么重要。

数据,如今是数据大时代,谁拥有数据,谁就能掌握未来,这一点很可怕的,现在你用的手机APP中存在着你的大量数据信息,大数据的积累可以掌握出你的作息时间,生活规律等。

对数据的存储有着良好的技术支持,是一个好的开发平台的体现,如果不能长时间保持数据,那么必然会被时代发展所淘汰。那么有长期保持数据的概念,就有瞬时数据这一概念的出现,什么是瞬时数据呢?

见名知意,瞬时代表一瞬间,指当存储的数据因程序关闭或其他原因等导致数据丢失,如果你想发个自拍发个朋友圈,可是一刷新就没了,是不是很恼怒呢?气不气,气不气,是不是想砸手机?


本篇主要介绍Android中实现数据存储的三种方式:

  1. 文件存储
  2. SharedPreference存储
  3. SQLite数据库存储

下面给出三种方式的数据文件默认存储的位置:

在DDMS里的File Explore下打开data文件夹,切换到DDMS视图,点击FileExplorer切换卡,进入到/data/data//files/目录下,可以看到文件了。

DDMS文件的导出

好了,接下来分析数据存储方式了。如上图为文件存储位置,接下讲第一个文件存储。然后再接着讲SharedPreferences存储和SQLite数据库存储。

文件存储

文件存储是Android中最基本的一种存储方式,和Java中实现I/O的方式,由Context类提供openFileInput()和openFileOutput()方法打开。文件存储主要分两种存储,一种是内部存储,一种是外部存储。

内存存储:使用了FileInputStream类中的openFileInput()方法,用于读取数据;使用了FileOutputStream类中的openFileOutput()方法,用于写入数据。

外部存储:使用Enviroment类中的getExternalStorageDirectory()方法对外部存储上的文件进行读写。

简化:

FileOutputStream -> openFileOutput()

FileInputStream -> openFileInput()

Environment -> getExternalStorageDirectory()

一,内部存储的写入文件步骤

第一,

获取文件输出流对象 FileOutputStream

第二,

使用FileOutputStream类的openFileOutput(String name, int mode)方法

第三,

调用FileOutputStream对象的write()方法写入文件

第四,

调用flush()方法,因为write()方法是写入缓冲区的,调用flush()方法将缓冲中的数据写入到文件,清空缓存

第五,

close()方法用于关闭FileOutputStream

二,内部存储的读取文件步骤

第一,

获取文件输入流对象 FileInputStream

第二,

使用FileInputStream类的openFileInput()方法来实现

第三,

调用FileInputStream对象的read()方法

第四,

调用close()关闭文件输入流对象

如上分别描述了内部存储的写入文件步骤和读取文件步骤,那么接下来代码例子展示一下这些步骤。

写入数据

在openFileOutput()方法中,接收两个参数,一个是文件名,另一个是文件的操作模式,主要有两种为 MODE_PRIVATE和MODE_APPEND。最后openFileOutput()方法会抛出FileNotFoundException。

主要代码步骤:

读取数据

读取文件内容的使用代码:

综上,在Android中读取与写入文件的方法,和Java中实现I/O的程序是一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。通过Context.openFileOutput()获取输出流,参数分别为文件名和存储模式;通过Context.openFileInput()获取输入流,参数为文件名。

介绍了内部存储,现在介绍外部存储。

外部存储的文件时全局都是可以读的,在程序中,使用Environment类的getExternalStorageDirectory方法,来读取外部文件。

最后外部存储文件,要加入读取与写入的权限,添加

READ_EXTERNAL_STORAGE

WRITE_EXTERNAL_STORAGE

这样文件存储就讲得差不多了,多练习试试。对于SharePreferences存储和SQLite存储,现在进入讲解。


下面对SharedPreferences存储介绍:

SharedPreferences是一种数据存储方式,用来存储一些简单的信息,位于android.content包中,以键值对的模式进行存储,键值对(key-value)。对于存储的基本信息,如int,string,boolean,float和long。

  1. 使用getSharedPreferences()方法获取
  2. 使用getPreferences()方法获取

实现SharedPreferences存储步骤:

第一,

调用SharedPreferences类的edit()方法,获取SharedPreferences.Editor对象

第二,

调用一个SharedPreferences.Editor对象的putXXX()的方法获取数据

第三,

使用commit()方法提交数据

在这里介绍完文件存储和SharedPreferences,接下来讲SQLite数据库存储。但是除了这三个,还有几种存储方式。如图:


接下来讲讲Android中SQLite数据库的增删改查的操作。

SQLite数据库存储

SQLite是一款轻量级的关系型数据库,它的运算很快,占用空间小,SQLite不仅有SQL语法支持,独立,还有数据库的ACID事务,SQLite数据库为一种嵌入式数据库。

SQLiteOpenHelper类,它是SQLiteDatabase的帮助类,用于管理数据库的创建和升级,SQLiteOpenHelper类为抽象类,有两个要重写的方法:onCreate()和onUpgrade(),用于去实现创建和升级数据库。

在SQLiteOpenHelper类中还需要一个构造方法,这个方法接收四个参数,分别为Context context,String name, CursorFactory factory,int version这四个。第一个是参数context,第二个是数据库名,第三个是自定义Cursor,一般为null,第四个为当前的数据库版本号。

在SQLiteOpenHelper类中有两个重要的实例方法,为getReadableDatabase()和getWritableDatabase()这两个方法。调用这其中的方法就能够创建数据库了。如果存在数据库就打开,没有就创建。

SQLiteOpenHelper类是一个SQLite帮助类,实现SQLite的数据操作,创建一个类去继承SQLiteOpenHelper,接下来代码示例一下。

接下来增加数据

如何增加数据,用put()方法即可,在SQLiteDatabase中提供insert()方法,接下来也讲解一下。

删除数据

用到的方法是delete(),第一个参数为表名,第二三位用于约束。

更新数据

用到的方法是update()方法,参数分别为表名,ContentValues对象,约束,约束,好了,接下来示例一下。

查询数据

用到的方法为query(),这个方法至少需要七个参数(table, columns, selection, selectionArgs, groupBy, having, orderBy),分别为表名,要查询出的名,查询条件语句,对应于selection语句中占位符的值,要分组的列名,分组后过滤条件语句,排序方式。

升级数据库

用到onUpdate()方法,分别删除表,再次在此方法里创建即可。

代码:

public class MySQLiteOpenHelper extends SQLiteOpenHelper {

   private static Integer Version = 1;
//构造函数
public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
int version) {
//必须调用父类当中的构造函数
super(context, name, factory, version);
} //context:上下文对象
//name:数据库名称
//param:factory
//version:当前数据库的版本
public MySQLiteOpenHelper(Context context,String name,int version){
this(context,name,null,version);
} public MySQLiteOpenHelper(Context context,String name){
this(context, name, Version);
}
//创建的时候被调用
@Override
public void onCreate(SQLiteDatabase db) {
//创建了数据库并创建一个的表
String sql = "create table sut(id int primary key,name varchar(200))";
db.execSQL(sql);
}
//数据库升级时调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("更新版本为:"+newVersion);
}
}

结语

  • Android存储技术知识点就介绍到这了,一起努力吧~

详解Android数据存储技术的更多相关文章

  1. Android数据存储技术

    Android提供了4种数据存储技术,分别是SharedPreferences.Files.SQLite数据库和网络存储数据.(有的开发者认为使用ContentProvider也可以算是一种,但我觉得 ...

  2. Android数据存储之GreenDao 3.0 详解

    前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite----> ...

  3. Android实现数据存储技术

    转载:Android实现数据存储技术 本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用Shar ...

  4. Android数据存储五种方式总结

    本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据     2 文件存储数据       3 SQLite数据库存储数据 4 使用Cont ...

  5. 详解Android首选项框架ListPreference

    详解Android首选项框架ListPreference 原文地址 探索首选项框架 在深入探讨Android的首选项框架之前,首先构想一个需要使用首选项的场景,然后分析如何实现这一场景.假设你正在编写 ...

  6. Android Binder IPC详解-Android学习之旅(96)

    linux内存空间与BInder Driver Android进程和linux进程一样,他们只运行在进程固有的虚拟空间中.一个4GB的虚拟地址空间,其中3GB是用户空间,1GB是内核空间 ,用户空间是 ...

  7. Android数据存储五种方式

    1 使用SharedPreferences存储数据:常用于做本地缓存 2 文件存储数据:(1)data/data/<package name>/files目录内   (2)SDCard内 ...

  8. (转载)实例详解Android快速开发工具类总结

    实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...

  9. Android - 数据存储 -存储文件

    Android使用的文件系统和其他平台的基本磁盘的文件系统很相似.这里将要介绍如何使用File API在Android文件系统中读写文件. File对象适合按顺序读写大量的数据.例如,适合图片文件或者 ...

随机推荐

  1. jquery之find,filter,has对比

    find()方法找的是符合条件的后代,返回的是子元素. $('div').find('.intro').css('color','red'); //寻找div后代类为intro的元素 filter() ...

  2. EOS踩坑记

    [EOS踩坑记] 1.每个account只能更新自己的contract,即使两个account的秘钥相同,也不允许. 如下,使用alice的权限来更新james的contract.会返回 Missin ...

  3. Docker 简介,入门

    1.简介 Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行 ...

  4. Pandas聚合

    数据聚合 import pandas as pd from pandas import Series import numpy as np # 准备数据 df = pd.DataFrame([[-0. ...

  5. netty(二) 创建一个netty服务端和客户端

    服务端 NettyServer package com.zw.netty.config; import com.zw.netty.channel.ServerInitializer;import io ...

  6. python命名规则

    1 包.模块的命名规则:全部以小写字母形式来命名.比如:import random 2 类.对象的命名规则:类是每个单词的首字母要大写,其他字母小写比如:class MyFamily: ,类的私有属性 ...

  7. eclipse中tomcat可以start启动,无法debug启动的解决

    设置断点,进行程序调试,但是debug启动tomcat,却无法启动,并且会报超时异常. 原因可能是eclipse和tomcat启动时读取文件发生冲突 去掉所有的断点,然后重新debug启动,再设置断点 ...

  8. SpringMVC 使用验证框架 Bean Validation(上)

    SpringMVC 使用验证框架 Bean Validation(上) 对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证. ...

  9. ES6 Number

    1. 新增Number.EPSILON(误差检查函数)

  10. PHP+ajax实现二级联动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...