Android基础知识(二十二):五大存储之SharedPreferences存储和SQLite数据库存储

Android基础知识(二十二):五大存储之SharedPreferences存储和SQLite数据库存储

一、SharedPreferences存储
不同于文件的存储方式,SharedPreferences是使用键值对的方式来存储数据的。此外SharedPreferences还支持多种不同的数据类型存储,因此使用SharedPreferences来进行数据持久化要比使用文件方便很多。
在这里插入图片描述

  1. 将数据存储到SharedPreferences中
    要使用SharedPreferences来存储数据,首先需要获取SharedPreferences对象。
    Android中提供了3种方法用于得到该对象:
    1] Context类中的getSharedPreferences()方法
    该方法接收两个参数,第一个参数用于指定SharedPreferences文件的名称,如果指定的文件不存在则创建,SharedPreferences文件都是存放在/data/data//shared_prefs/目录下的。
    第二个参数用于指定操作模式,目前只有MODE_PRIVATE模式可选,表示只有当前的应用程序才可以对该文件进行读取,其他模式被废弃。
    在这里插入图片描述
    2] Activity类中的getPerferences()方法
    该方法只接受一个操作模式参数,使用这个方法时会自动将该当前活动的类名称作为SharedPreferences的文件名
    3]PreferenceManager类中的getDefaultSharedPreferences()方法
    这是一个静态方法,它接收一个Context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。
    在这里插入图片描述
    得到了SharedPreferences对象之后,就可以进行数据存储了,向SharedPreferences文件中存储数据主要分为3步实现:
    1]调用SharedPreferences对象的edit()方法以此来获取一个SharedPreferences.Editor对象
    2] 向SharedPreferences.Editor对象中添加数据
    3] 调用apply()方法将添加的数据提交,从而完成数据存储操作
    如下为获取Editor对象,添加数据并提交保存数据的例子。
    在这里插入图片描述
    在/data/data//shared_prefs目录下可以看到Data.xml文件,其中的数据即为以上代码添加的数据。
    在这里插入图片描述
    在这里插入图片描述
  2. 从SharedPreferences中读取数据
    SharedPreferences对象中提供了一系列的get方法,用于对存储的数据进行读取,每种get方法对应SharedPreferences.Editor中的一种put方法。
    如下为将之前存储的key为name,value为Tom的数据从SharedPreferences中取出的代码。
    在这里插入图片描述
  3. 关于提交数据apply和commit方法的区别
    apply没有返回值,而commit返回boolean表明修改是否提交成功。
    apply是将修改数据原子提交到内存,而后异步真正提交到硬件磁盘;而commit是同步的提交到硬件磁盘,因此在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后再操作,从而降低了效率。而apply只是原子的提交到内存,后面有调用apply的函数将会直接覆盖前面的内存数据,从一定程度上提高了效率。
    apply方法不会提示任何失败的提示。

二、数据库存储——SQLite
Android系统内置了数据库SQLite,SQLite是一款轻量级的关系型数据库,其运算速度非常快,占用资源很少,通常只需要几百KB的内存就足够了,因而特别适合在移动设备上使用。SQLite不仅支持标准的SQL语法,而且还遵循了数据库的ACID事务。

  1. 创建数据库
    Android提供了一个SQLiteOpenHelper帮助类,借助这个类就可以简单地对数据库进行创建和升级。SQLiteOpenHelper是一个抽象类,其中有两个抽象方法onCreate()实现创建数据库的逻辑,onUpgrade()方法实现数据库升级的逻辑
    另外SQLiteOpenHelper中有两个非常重要的实例方法:getReadableDatabase()和getWritableDatabase(),这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。不同的是,当数据库不可写入的时候,getReadableDatabase()方法返回的对象将以只读打开数据库,而getWriteableDatabase()方法将抛出异常。
    在这里插入图片描述
    继承SQLiteOpenHelper类,并实现onCreate()和onUpgrade()方法,在onCreate()方法中创建表Book。
    在这里插入图片描述
    通过构造函数构建数据库,指定数据库名为“BookStore.db”,版本为1。并通过调用方法getWritableDatabase()方法,创建数据库。
    在这里插入图片描述
  2. 升级数据库
    onUpgrade()方法用于对数据库进行升级,升级数据库需要在onUpgrade()方法中调用drop语句删除原数据库的表,并调用onCreate()方法重新创建数据库与表。
    在这里插入图片描述
    onUpgrade()方法触发的条件是:SQLiteOpenHelper的构造方法中的第四个参数表示当前数据的版本号,只要更新该版本号比之前的版本大,那么onUpgrade()方法就会得到执行。
    在这里插入图片描述
  3. 修改数据库
    对于数据库中已创建的表,在表中插入一列可以使用SQL的ALTER语句,但是删除一列是没法做到的,SQLite不支持删除列操作,所以删除列的话需要对创建新的表并删除原表。
  4. 插入数据
    对数据的CRUD操作,既可以使用SQL语句,同时Android提供了一系列的辅助性方法。调用SQLiteOpenHelper的getReadableDatabase()或getWritableDatabase()方法会返回一个SQLiteDatabase对象,该对象可以对数据进行CRUD操作。
    insert()方法用于插入数据,第一个参数为表名,第二个参数用于在未指定添加数据的情况下给某些可为空的列自动赋值为null,一般不用;第三个参数为ConentValues对象,其提供了一系列put()方法用于添加数据。
    在这里插入图片描述
  5. 更新数据
    update()方法用于对数据进行更新,这个方法接收四个参数,第一个参数为表名;第二个参数为ContentValues对象;第三、四个参数用于约束更新某一行或者某几行中的数据,不指定的话默认更新所有行
    在这里插入图片描述
  6. 删除数据
    delete()方法用于对数据进行删除,该方法接收三个参数,第一个参数为表名;第二、三个参数用于约束删除某一行或者某几行的数据,不指定的话默认删除所有行
    在这里插入图片描述
  7. 查询数据
    query()方法用于对数据进行查询,该方法有7个参数,具体描述如下所示。
    在这里插入图片描述
    查询数据的一个例子如下所示。
    在这里插入图片描述
  8. 使用SQL操作数据库
    除了辅助的方法能够操作数据外,Android还提供了能够使用SQL语句进行操作数据库的方法。
     添加数据
    在这里插入图片描述
     更新数据
    在这里插入图片描述
     删除数据
    在这里插入图片描述
     查询数据
    在这里插入图片描述

参考资料:《第一行代码 Android 第2版》

猜你喜欢

转载自blog.csdn.net/weixin_38196407/article/details/89640388