Android学习笔记数据持久化存储

数据持久化存储:将数据存储在硬盘、U盘、光盘等等存储介质中,而不是仅仅在内存中。

Android中数据存储方案
1. 偏好设置:SharedPreferences
2. 文件存储
3. SQLite数据库
偏好设置:SharedPreferences
用于存储用户在使用软件时的个性化设置,例如:打开背景音乐、非WIFI下自动加载数据……
这些数据通常可以使用Key-Value表示,且数据量相对较小。
【写入数据】
1. 通过Context定义的getSharedPreferences(String, int)获取SharedPreferences对象,其中,参数String表示存储偏好设置的文件的文件名,不需要显示的定义扩展名,参数int表示文件的访问模式,使用Context的常量MODE_PRIVATE
2. 通过SharedPreferences对象的edit()方法,获取Editor对象
3. 通过Editor对象的put???系列方法写入数据
4. 通过Editor对象的commit()方法提交写入
【读取数据】
1. 获取SharedPreferences对象(参考写入数据)
2. 通过SharedPreferences对象的get???系列方法读取数据
文件存储
文件存储适用于例如:写入日志、接收远程的文件等等。
文件存储区分为:
1. 内部存储:将文件存储到应用程序的数据目录中,即 /data/data/应用程序包名/files 下
2. 外部存储:将文件存储到指定的位置
3. 内部缓存存储:将文件存储到 /data/data/应用程序包名/cache 下
4. 外部缓存存储:将文件存储到SD卡的缓存目录
不同的存储方式将把文件存储到不同的位置,不同的位置的访问权限也不相同。
所有的文件存储都是使用JAVA中的IO实现的。
【内部存储】
通过openFileInput()/openFileOutput()获取输入/输出流。
File getFilesDir() -> 获取 /data/data/应用程序包名/files 文件夹对象
File getDir(String, int) -> 获取指定的文件夹对象,参数1表示文件夹的名称,该对象对应到 /data/data/应用程序包名/app_文件夹名称,其中,前缀app_是Android系统自动添加的,开发者在使用时完全不需要考虑前缀的问题
boolean deleteFile(String) -> 删除指定的文件,返回值表示删除操作是否成功
【内部缓存】
内部缓存对应的文件夹是 /data/data/应用程序包名/cache 
File getCacheDir() -> 获取缓存文件夹的对象
内部缓存是不可靠的,Android系统会自动管理缓存文件夹,将缓存文件夹占用的空间控制在合理的范围之内。
【外部存储】
* 注意声明权限
外部存储对应SDCARD文件夹下。
外部存储是不可靠的,因为它是公有的访问权限的,并且,外部存储不是始终可用的。
外部存储相关的文件对象操作可以使用Enviroment类实现。
【外部缓存】
* 注意声明权限
File getExternalCacheDir() -> 获取外部缓存的文件夹对象。
外部缓存不会被Android系统进行管理,所以,开发者应该制定一系列的逻辑手动的对外部缓存进行管理,例如定期清除部分文件,或者按照大小清除文件等等,将外部缓存控制在合理的范围之内。
当卸载应用程序时,外部缓存将被清除。
数据库相关名词解释
数据库:数据表的集合
数据表:用于存储数据
字段/列:对应某1竖排,用于约定该列(竖排)存储什么样的数据
行:对应某1横排数据,或者称之为1条数据
数据库相关英语
database:数据库
table:数据表
column:字段/列
row:行
unique:唯一的
execute:执行
insert:插入
primary:主要的
autoincrement:自动增长
SQL语法
【创建数据表】
create table 表名 (字段设计列表);
其中,字段设计列表的各字段使用逗号分隔。
设计字段的格式为:
字段名称 数据类型 [字段约束]
例如:
create table students (name varchar(50) not null unique, age integer, gender integer);
【增加数据】
insert into 表名 (字段列表) values (值列表);
例如:
insert into students (name) values ('Jack');
insert into students (name, age, gender) values ('Mike', 20, 1);
insert into students (age, name, gender) values (19, 'Rose', 0);
【删除数据】
delete from 表名 [where子句];
*** 注意:没有where子句的话,会删除该表中所有数据,且删除操作是不可逆的
where子句:
where 字段名 条件运算符 值 [关系运算符 字段名 条件运算符 值]
例如:where name = 'Jack' 或者 where age <> 18 或者 where name='Jack' and age=18
完整的删除语句例如:
delete from students
delete from students where name='Jack'
delete from students where age<>18
delete from students where name='Jack' and age<>18
【修改数据】
update 表名 set 修改列表 [where子句];
*** 注意:没有where子句的话,整个数据表中所有的数据都会被修改
修改列表:
字段=值
修改列表中如果需要修改多个字段的值,则使用逗号进行分隔
完整的修改语句例如:
update students set age=20 where id=3 or id=5
【查询数据】
select 字段列表 from 表名 [where子句] [order by子句]
字段列表:
例如 name, age, gender,表示要查询的字段,如果查询所有的字段,可以使用*表示
order by子句:
用于对查询到的结果进行排序,格式为:order by 字段名 排序方式
其中,asc表示顺序排列,desc表示倒序排列,例如order by id desc表示根据id字段倒序排列,由于顺序排列是默认的排列方式,所以,需要顺序排列时,可以省略asc,即order by name
SQL语法中的条件运算符与关系运算符
= > >= < <= <> and or not
SQLite API
【增加数据】
long insert(String table, String nullColumnHack, ContentValues values)
参数1:表名
参数2:仅当参数3不是有效数据(为null或者没有封装数据)时需要填写,否则,该参数直接使用null即可
参数3:封装了K-V的对象,其中,K是设计数据表时的字段名,不可以随意填写,V是该字段对应的值,即希望填充到该字段的值
返回值:新增加的记录的ID,如果增加失败,则返回-1
【删除数据】
int delete(String table, String whereClause, String[] whereArgs)
参数1:表名
参数2:where子句,但不包含where关键字,且where子句中的各字段值推荐使用?占位
参数3:如果参数2中存在?,则参数3的数组列举各?对应的值,如果参数2中不存在?,则参数3为null即可
返回值:受影响的行的数量,如果删除失败或者没有删除数据,则返回0
【修改数据】
int update(String table, ContentValues values, String whereClause, String[] whereArgs)
参数1:表名
参数2:参考insert()方法
参数3:参考delete()方法
参数4:参考delete()方法
返回值:受影响的行的数量
【查询数据】
Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
参数1:表名
参数2:要查询的字段列表,null表示查询所有字段
参数3:where子句,参考delete()方法的参数whereClause
参数4:参考delete()方法的参数whereArgs
参数5:无视
参数6:无视
参数7:order by子句,不需要填写“order by”关键字
返回值:Cursor对象


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值