详解Android数据存储技术

6,040 阅读6分钟

标题图

前言

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

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

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

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


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

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

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

数据存储方式

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

DDMS文件的导出

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语句中占位符的值,要分组的列名,分组后过滤条件语句,排序方式。

查询数据

cursor

升级数据库

用到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存储技术知识点就介绍到这了,一起努力吧~
  • 小礼物走一走 or 点赞

image