数据持久化存储:将数据存储在硬盘、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对象