数据存储

Posted 鹏达君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据存储相关的知识,希望对你有一定的参考价值。

1.持久化技术简介

   瞬间数据指的是存储在内存当中的数据,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据。所以为了解决这个缺点,就出现了数据持久化。数据持久化就是指将那些内存中的瞬间数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据都不会丢失,简单点说就是持久化技术是提供一种机制让数据在瞬间状态和持久状态之间进行转换。而安卓系统主要提供了三种方式来实现数据持久化功能,为文件存储,SharedPreference存储以及数据库存储。(还可以存储在SD卡中,但是缺点是操作较为复杂和较不安全)

 

2.文件存储

2.1文件存储的介绍

      文件存储是安卓中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有的数据都是原封不动地保存到文件当中的,因而它比较适合用于存储一些简单的文本数据或二进制数据。如果想要保存一些比较复杂的文本数据,就需要定义一套自己的格式规范,方便于读取数据之后进行解析。

 

2.2将数据存储到文件中

核心代码:

说明:

data:要存储的数据

openFileOutput里面的两个参数说明:第一个为文件名,直接写名字,因为其会默认保存到/data/data/包名/files/

目录下,第二个参数为操作模式,主要有两种模式可选,MODE_PRIVATE和MODE_APPEND。其中前者为默认的操作模式,表示当指定同样文件名的适合,所写入的内容将会覆盖原文件中的内容,而后者表示该文件已存在,就往文件里面追加内容,不存在就创建新的文件。

 

2.3将数据从文件中读取出来

 核心代码:

 

2.4应用:

1)保存:

取出:

说明:

1)setSelection()方法将输入光标移动到文本的末尾位置以便于继续输入。

2)TextUtils.isEmpty()方法可以一次性进行两种空值的判断。当传入的字符串等于null或者等于空字符串的时候,这个方法都会返回true。

 

2.5总结

核心技术就是利用Context类中提供的openFileInput()和openFileOutput()方法,之后就是利用Java的各种流来进行读写操作。但该方法不适合保存一些较为复杂的文本数据,因此,我们学习一个比文件存储更加简单易用,而且很方便地对某一指定的数据进行读写操作(SharedPreferences存储)。

 

3.SharedPreferences存储

3.1简介

SharedPreferences是采取键值对的方式进行存储数据的。也就是说,当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。其支持多种不同的数据类型存储。

 

3.2将数据存储到SharedPreferences

1)获取SharedPreferences

 

 

2)步骤:

 

3)核心代码:

 

注意:其写入的数据是使用xml格式来管理的,具体形式如下:

 

3.3从SharedPreferences中读取数据

1)步骤

(1)获取SharedPreferences对象

(2)获取数据

 

2)核心代码

说明:

 

3.4  实现记住密码功能

1)

 

2)

                                }

 

      }

}

 

代码说明:

当点击登录按钮,如果密码账号不正确那么久提示错误信息,如果其密码账号是正确的话就对其是否点下记住密码的按钮,如果是,那么就保存好数据,当再次返回该活动时,取出该数据。如果不是就清空数据。最后跳转活动。

 

4.SQLite数据库存储

4.1介绍

安卓是内置SQLite数据库的,前面我们学的文件存储和SharedPreferences只适用于一些简单的数据和键值对,当需要存储大量复杂的关系型数据的时候,就使用该存储方式。

 

4.2创建数据库

1)核心思想:利用了SQLiteOpenHelper对象去创建数据库和更新数据库。

注意:SQLiteOpenHelper获取数据库对象有两种方法,为getReadableDatabase()和getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。不同的是,当数据库不可写入的时候(如磁盘空间已满),getReadableDatabase()方法返回的对象将以只读的方式打开数据库,而getWritableDatabase()方法则将出现异常。

 

2)具体步骤:

(1)继承SQLiteOpenHelper对象,复写onCreate()和onUpgrade()方法。(创建表的语句就在这个类定义,一般采取常量定义语句)

注意:该对象的构造方法有两个,一般我们选用只有四个参数的构造函数,每个参数的具体含义如下:

(2)在activty中创建该实例,再调用获取数据库的方法(一般用getWritableDatabase())

 

3)代码:

 

 activity中:

 

 4.3升级数据库

步骤:

(1)在onUpgrade()方法中删除已存在的表,再生成表

(2)获取SQLiteOpenHelper的时候将版本号增加

 

代码:

}

 

在activity中:

 

 

4.4添加数据

步骤:

(1)获取db对象

(2)获取ContentValues对象

(3)添加数据

注意:添加新的一条记录的时候先清除values值。

 

代码:

      

 

4.5更新数据

步骤:

1)获取db对象

2)获取ContentValues对象

3)将改变后的值添加进去

4)设置更新条件

 

代码:

 

4.6删除数据

步骤:

1)获取db对象

2)定义删除条件

 

代码:

 

 

4.7查询数据

1)核心思想:获取到cursor对象,从而进行查询。其最短的构造函数是有七个函数,具体含义如下:

 

 2)具体步骤

(1)获取db对象

(2)获取Cursor对象

(3)遍历Cursor对象,取出数据并打印

(4)关闭cursor对象资源

 

3)代码

 

 

4.8 使用SQL语句操作数据库

前言:前面都是使用安卓提供给我们api去操作数据库,现在我们直接用sql语句去操作数据库,具体如下:

 

 5.使用LitePal操作数据库

5.1LitePal简介

     其是一款开源的安卓数据库框架,它采用了对象关系映射的模式,并将我们平时开发最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表和增删改查的操作。

 

5.2配置LitePal

1)配置依赖

 

2)配置litepal.xml文件

 

3)配置LitePalApplication

 

 

5.3创建数据库

步骤:

1)创建表类(典型的Javabean,属性为列)

2)将表添加到映射列表中(注意,一定要用完整的类名)

 

3)直接使用Connector.getDatabase()创建数据库

 

5.4升级数据库

 前言:前面我们升级数据库都会丢失原本表的数据,而使用以下方法就帮助我们解决了这个问题

步骤:

(1)添加新的数据库内容

(2)配置文件litepal.xml的version属性加1

(3)直接使用Connector.getDatabase()升级数据库

 注意:这个方法克服了上述sqlite更新数据库的缺点,就是如果更新数据库,其表里面的数据会丢失,但在这边不会。

 

5.5使用LitePal添加数据

步骤:

1)bean类要改为继承DataSupport

2)获取bean类对象,调用set的方法,最后调用save()方法

 

代码:

 

 5.6使用LitePal更新数据

1)核心思想:先判断是否存储,然后对该存储对象重新设置,重新调用save()方法即可。而对LitePal而言,对象是否存在是根据调用model.isSaved()方法来判断的,返回true表示已存储,返回false表示未存储。而返回true的情况如下:

 

2)代码

问题:该更新方式只能对刚已存储的对象进行操作,限制性比较大。

 

这边使用到了利用条件去查找需要更新的记录

 

 

这个是将所有的记录的pages列设置为默认值。

 

 

 5.7使用LitePal删除数据

前言:

使用LitePal删除数据的方式主要有两种:

1)直接调用已存储对象的delete()方法

2)通过LitePal提供的查询API查出来的对象,使用delete()方法来删除数据。

 

代码:

说明:第一个函数为表名,第二个为条件,第三个为条件的值

 

 

5.8使用LitPal查询数据

代码:

问题:这个是获取所有的记录,如果想根据一定的条件获取记录,用如下条件方法:

 

以上是关于数据存储的主要内容,如果未能解决你的问题,请参考以下文章

gis 数据如何存储

Android 数据存储

ElasticSearch数据存储内容

Android中数据存储——ContentProvider存储数据

数据的存储方法都有哪些

Android中数据存储——SQLite数据库存储数据