数据存储方案


Android中的数据持久化主要有三种方式 1.文件存储 2.SharedPreferences存储 3.以及数据库存储

文件存储

是Android中最基本的数据存储方式,它不对任何格式化处理,所有数据时原封不动的保存到文件中的,比较适合存储一些简单文本或者二进制数据。

存数据到文件中

需要知道的常识:Android中所有的文件默认存储到/data/data/<包名>/files目录下的
我们创建一个FilePersistenceTest项目:
首先在activiyt_main中添加一个用于接受数据的输入框

其次在MainActivi中编写添加数据,和存储数据的逻辑


运行代码,输入一串文字,通过查看发现数据已经被存储在文件中了

从文件中读取数据

直接修改MainActivity中的代码:

修改onCreate代码:

SharedPreferences存储

SharedPrefernces是基于键值对的方式来存储数据的,当保存一条数据需要提供一个对应的键。读数据可以通过键来得读取

将数据存储到SharedPrederences中

Android中提供了两种获取SharedPreferences对象的方法
1.Context类中的getSharedPrederences()方法
2.Activity类中的getPreferences()方法
创建一个SharedPreferncesTest项目,修改acitivity_main.xml中的代码:

修改MainActivity中的代码:

我们看到数据被存储了进来,此时的数据时被存放在xml里面管理的。

从SharedPreference中读取数据

从Sharedpreference中读取数据其实也非常简单,也会有一系列的api使用,该对象提供了一些列的get方法,用来拿去数据,
我们在上面的项目的基础上,在进行改造,首先修改activity_main.xml的文件,增加一个触发获取数据的按钮

在MainActivity中增加点击事件

运行项目:点击获取数据按钮,查看日志,可以看到拿到了数据

实现记住密码功能

我们来实现一个记住密码的功能,直接沿用我们上次写的强制下线的demo
在activity_main中添加布局,将页面修改你为下图所示:

修改LoginActivity中的代码:

SQLite数据库存储

SQLite是安卓内置的数据库,是一种轻量级的关系型数据库,运算速度非常快。特别适合在移动设备上

创建数据库

在Android系统中,我们继承SQLiteOpenHelper,来实现创建数据库

在activity_main中加入一个按钮,用于触发创建数据库

最后修改MainActivity中的代码:

创建完之后我们可以通过工具查看,

升级数据库

我们发现还有一个onUpgrade数据库,这方法是用于对数据库升级的,首先对MyDatabaseHelper进行修改,
如果我们直接创建表的话,程序会报错,因为之前存在这个表,再次创建的会引起冲突。

然后在MainActivity里面修改对应的版本号,让onUpgrade执行

我们查看DB Browser中可以得到:说明创建成功

添加数据

SQLite中提供了一个insert方法,我们使用例子来说明问题
首先在activity_main中添加按钮,这里创建出来一个按钮用与触发添加数据

然后再MainActivity中写监听事件

我们可以看到数据已经添加进来

更新数据

和插入删除一样,首先先在activity_main.xml中添加一个更新按钮

加入按钮的监听事件:

更新完成

删除数据

SQLiteDatabase中提供了一个delete方法,用于删除数据。我们也是用案例来说明
首先在activity_main.xml中添加一个删除按钮,

然后再MainActivity里面编写对按钮的监听事件

最后我们可以看到数据库里面的数据被删除掉了,

查询数据

我们在实际的案例中,大部分场景都是查询场景,SQLite提供了一个query的方法用于对数据进行查询,这个方法需要传入7个参数,如下

我们通过具体的例子来感受一下:
首先添加一个查询数据的按钮,在activity_main.xml中

在MainActivity中编写监听事件

我们可以看到查询结果

以上,知识简单的用法,之后还有许多更加智能的用法,在后续工作中慢慢练习使用

使用SQL操作数据

其实就是直接编写好对应的SQL,然后放在execSQL方法里面直接即可。我们看下的例子

db.execSQL("insert into Book(name,author,pages,price) values (?,?,?,?)",arrayOf("The Da Vinci Code","Dan Brown","454","16.96"))
更新,删除,查询类似

使用事物

事物,在我们数据库中常用,SQLite也是支持事务的。我来实践一下。
还是现在添加按钮

然后编写监听事件

上面代码中认为制造了一个异常,执行该代码会使得事物执行失败。这样数据不会被我们删除。当我们删除了抛出异常的代码之后,继续执行就会删除掉数据

升级数据库的最佳写法

我们之前在升级数据库的时候,在onUpgrade()方法里面升级,删除原来的数据库,然后再创建一个新的数据库。这一看,非常的不合理。

我们对升级数据库的方法进行一下改造:
如下,当我们用户直接安装第二版本的时候,就直接执行OnCreate中的方法,如果是第一版升级第二版的时候就需要执行onUpgrade()方法

当我们需要升级到第三个版本的时候,就需要在Category的表里面添加几个字段,