Android第六章 (持久化技术)
6.1 持久化技术简介
数据持久化:指将那些内存中的瞬时数据保存到存储设备当中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失。
持久化技术则提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换。
Android主要提供了文件存储、SharedPreferences存储和数据库存储三种存储方式
6.2 文件存储
文件存储:是Android中最基本的一种数据存储方式,他不对存储的内容进行任何的格式化处理,所有的数据都是原封不动地保存到文件当中,因而它适合存储一些简单的文本数据或二进制数据。若要保存一些较为复杂的文本数据,就需要定义一套自己的格式规范,方便将数据从文件中解析出来
6.2.1 将数据存储到文件中
Context类提供了openFileOutput方法,可以用此方法将数据存入到指定的文件当中。在此方法中传入的第一个参数为文件名(注意文件名不能包含路径,因为路径是默认存储到/data/data/<package name“>”/files/目录下的);第二个参数为文件的操作模式,一般有MODE_PRIVATE和MODE_WORLD,前者是默认的操作模式,写入的内容会覆盖文件中的内容;后者表示追加内容。
我们一般使用Java中的IO流将数据存入到文件中
1、在布局文件中定义一个EditText的控件,该控件可以输入数据进去
2、修改MainActivity中的代码
这里我们在onDestroy()方法中获取EditText中输入的内容,并调用save()方法把输入的内容存入到文件当中
6.2.2 从文件中读取数据
,Context类中还提供了一个openFileInput()方法,用于从文件中读取数据,它只接收一个参数,即要读取的文件名。同样地,我们一般使用Java中的IO流将数据输出到界面中
我们修改MainActivity中的代码:
这里onCreate()方法中通过调用load方法来读取文件中存储的文本内容;定义一个String类型的字符串接受load方法的返回值调用**TextUtils.isEmpty(inputText)判断字符串是否为空,若不为空,则 调用editText.setText(inputText);**方法将文件中数据内容填充到EditText输入框里,**editText.setSelection(inputText.length());**表示将输入光标移动到文本的末尾位置方便继续输入
6.3 SharedPreferences存储
该存储方式是使用键值对的方式进行存储数据的,意思是档保存一条数据时,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值读取出来
6.3.1 将数据存储到SharedPreferences中
三种获取SharedPreferences对象的方法
1、Content类中的getSharedPreferences()方法
此方法中传入了两个参数,第一个为文件名称,第二个为操作模式,现阶段只要MODE_PRIVATE模式可以使用
2、Activity类中的getPreferences()方法
该方法与上一个方法相似,不过他只接受一个操作模式参数
3、PreferenceManager类中的getDefaultSharedPreferences()方法
这是一个静态方法,接受一个Content参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件
在得到SharedPreferences的对象之后,主要通过以下三步实现向SharedPreferences文件中存储数据
1、调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象。
2、向SharedPreferences.Editor对象中添加数据
3、调用apply()方法将添加的数据提交,完成操作
具体实现:
6.3.2 从SharedPreferences中获取数据
①创建一个SharedPreferences的对象,调用getSharedPreferences()方法
②创建相应的数据类型,获取SharedPreferences的相应数据类型的get()方法的数据
③get()方法传入两个参数,第一个是“键”,第二个是默认值
具体操作:
6.4 SQLite数据库存储
SQLite数据库是一款轻量级的关系数据库,适用于存储数据信息较大的数据
6.4.1 创建数据库
Android提供了一个SQLiteOpenHelper帮助类(抽象类),借助这个类可以对数据库进行简单的创建和升级。通过继承这个类并重写其中的onCreate()方法(创建数据库)和onUpgrade()方法(升级数据库),实现创建。
SQlLiteOpenHelper中提供了两个实例方法:getReadableDatabase()方法和getWritableDatabase()方法。
相同点:这两个方法都可以创建或打开一个现有的数据库,并返回一个可对数据库进行读写操作的对象。
不同点:当数据库不可写入(如磁盘空间已满),前者方法返回的对象将只读方式打开数据库,后者方法则将出现异常
SQLiteOpenHelper中有两个构造函数,对于其中一个接收四个参数的构造函数,第一个参数接收要进行操作的活动,第二个参数接收数据库名,创建数据库时使用的就是这里指定的名称,第三个参数允许我们在查询数据的时候返回一个自定义的Cursor(光标,相当于指针),一般都是传入null,第四个参数表示当前数据库的版本号,可以用于对数据库进行升级操作。创建出SQLiteOpenHelper的一个实例后,再调用它的getReadableDatabase()方法和getWritableDatabase()方法就能够创建数据库了。
具体操作:
这样就成功创建了一个数据库
6.4.2 升级数据库
这样,数据库升级成功
6.4.3 添加数据
对数据进行操作有4种,即CRUD,C代表添加,R代表查询,U代表更新,D代表删除
SQLiteDatabase中提供了一个insert()方法专门用于添加数据,该方法传入的第一个参数是表名,第二个参数用于在未指定添加数据的情况下给某些可为空的列自动赋值为NULL,第三个参数是一个ContentValus对象
我们试验一下:
6.4.4 更新数据
update()方法中,传入的第一个参数为表名,第二个参数表示要传入的更新的数据,第三、第四个参数用于约束更新某一行或某几行的数据,不指定的话默认就是更新所有行
这里最后一句表示指定书名的价钱
6.4.5 删除数据
delete()方法专门用于删除数据,传入的第一个参数为表名,第二、三个参数用于约束删除某一行或某几行的数据,不指定的话默认就是删除所有行
这里最后约束表示删除页数大于500的书籍
6.4.6 查找数据
具体操作:
6.5 使用LitePal操作数据库
6.5.1 LitePal简介
开源库LitePal是一款开源的Android数据库框架,它采取了对象关系映射(ORM)的模式,将我们平时开发最常用到的一些数据库功能进行了封装。对于对象关系映射的模式,简单来说,我们使用的编程语言是面向对象语言,而使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射
6.5.2 配置LitePal
6.5.3 创建和升级数据库
通过这个类就会对应数据库中的Book表
6.5.4 使用LitePal添加数据
6.5.5 使用LitePal更新数据
两种常见的更新方式
1、对已存储的对象进行操作赋值(待修改的对象赋值之后直接进行更新 一对一)
2、(通过设置一些数据和指定修改的数据的键,更新全部相关的数据 一对多)
6.5.6 使用LitePal删除数据
其中Book.class表示删除Book表中的数据,后面表示删除价格小于15的所有数据
6.5.6 使用LitePal查询数据
6.6 小结
1、持久化技术的简介
2、存储方式之一:文件存储:是Android中最基本的一种数据存储方式,他不对存储的内容进行任何的格式化处理,所有的数据都是原封不动地保存到文件当中,因而它适合存储一些简单的文本数据或二进制数据。
3、存储方式之二:SharedPreferences存储:该存储方式是使用键值对的方式进行存储数据的,意思是档保存一条数据时,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值读取出来
4、存储方式之三:SQLite数据库是一款轻量级的关系数据库,适用于存储数据信息较大的数据
5、SQLite数据库的常用功能:创建数据库、升级数据库,CRUD功能
6、更强大的数据库:LitePal操作数据库
7、LitePal操作数据库的常用功能:创建数据库、升级数据库,CRUD功能
本文地址:https://blog.csdn.net/Cristiano_san/article/details/106441978