Android 中的数据储存方案, 持久化技术
2018-03-06 00:00
447 查看
Android 中储存数据的方法主要有三种: 1,文件储存. 2,SharedPreference储存. 3,数据库储存.
mode 模式 :
MODE_PRIVATE 已存在同名文件时覆盖原有内容
MODE_APPEND 已存在时追加到文件末
MODE_WORLD_READABLE 允许其他应用读(不提倡, 在4.2中废除)
MODE_WORLD_WRITEABLE 允许其他应用写(不提倡, 在4.2中废除)
返回一个 FileOutputStream 供写入文件
只带一个参数, 返回一个 FileInputStream 可以很方便的得到文件内容
要以 SharedPreferences 储存数据, 首先要获取 SharedPreferences 对象, 有三种方法获取.
储存
Context.getSharedPerferences(String fileName, int mode). 其中第一个参数为文件名, 第二个参数为操作模式, 操作模式只有 MODE_PRIVATE 可选 .
Activity.getDefaultSharedPerferences(int mode). 该方法只接受一个参数, 操作模式.
PreferenceManager.getDefaultSharedPreferences(Context context), 这是一个静态方法, 接受一个当前上下文参数,并使用包名命名储存文件.
储存步骤有三步
调用SharedPreferences.edit()方法获取一个SharedPreferences.Editor 对象.
向SharedPreferences.Editor 对象中添加数据, 例 : .putBoolean(), .putString().
调用 .apply() 提交改变
例
读取
从 SharedPreferences 中读取数据很简单, 只需调用 SharedPreferences.Editor.getString("key") 获取不同类型的数据调用不同的方法 boolean, getBoolean.
构造方法 :
context: 上下文, 应用程序上下文
name: 数据库的名称, 会生成文件 /data/data/com.example.myapplication/databases/dbname.db
factory: 工厂方法, 一般传入 null
version: 版本, 增加则会执行 onUpgrade
这个带两个抽象方法, onCreate 用于创建数据库(不存在的情况)时执行. onUpgrade 用于升级时执行, 当 实例化该类时 版本相比以前增加时执行.
实例化, 创建/获取 数据库
插入数据
通过操作 getWritableDatase() 返回的 SQLiteDatabase 对象, insert 方法插入数据
更新数据
values: 要更新的新值
whereClause: 约束条件, SQL语句中的 where , 例 : "name=?"
whereArgs: 替换 ? 占位符内容
删除数据
删除数据比较简单
查询数据
查询是所有操作中最复杂的, 参数很多, 通过 query 方法返回一个 Cursor 对象操作返回结果.
参数解释:
table : 表名
columns : 指定查询的列名
selection : 指定where的约束条件
selectionArgs : 约束条件的值
groupBy : 指定 group by 的列
having : group by 的约束
orderBy : 结果的排序方式
对 Cursor 对象进行操作.
直接使用SQL
(完)
博客链接
1. 文件储存
适用于储存简单的文本数据, 不对数据进行任何格式化写入
FileOutputStream Context.openFileOutput(String fileName, int mode);
mode 模式 :
MODE_PRIVATE 已存在同名文件时覆盖原有内容
MODE_APPEND 已存在时追加到文件末
MODE_WORLD_READABLE 允许其他应用读(不提倡, 在4.2中废除)
MODE_WORLD_WRITEABLE 允许其他应用写(不提倡, 在4.2中废除)
返回一个 FileOutputStream 供写入文件
读取
FileInputStream Context.openFileInput(String fileName);
只带一个参数, 返回一个 FileInputStream 可以很方便的得到文件内容
2. SharedPreferences 储存
以键值对的方式储存, 支持多种不同的数据类型, 储存和读取的数据类型一致.要以 SharedPreferences 储存数据, 首先要获取 SharedPreferences 对象, 有三种方法获取.
储存
Context.getSharedPerferences(String fileName, int mode). 其中第一个参数为文件名, 第二个参数为操作模式, 操作模式只有 MODE_PRIVATE 可选 .
Activity.getDefaultSharedPerferences(int mode). 该方法只接受一个参数, 操作模式.
PreferenceManager.getDefaultSharedPreferences(Context context), 这是一个静态方法, 接受一个当前上下文参数,并使用包名命名储存文件.
储存步骤有三步
调用SharedPreferences.edit()方法获取一个SharedPreferences.Editor 对象.
向SharedPreferences.Editor 对象中添加数据, 例 : .putBoolean(), .putString().
调用 .apply() 提交改变
例
SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit(); editor.putString("key", "value"); editor.putBoolean("bool", true); editor.apply();
读取
从 SharedPreferences 中读取数据很简单, 只需调用 SharedPreferences.Editor.getString("key") 获取不同类型的数据调用不同的方法 boolean, getBoolean.
3. SQLite 数据库储存
用数据库储存需要用到一个帮助抽象类: SQLiteOpenHelper 我们需要实现一个类然后继承它. 然后实例化.class SQLiteData extends SQLiteOpenHelper{ public SQLiteData(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } [@Override](https://my.oschina.net/u/1162528) public void onCreate(SQLiteDatabase sqLiteDatabase) { // 此处添加创建数据库表的代码 } [@Override](https://my.oschina.net/u/1162528) public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { // 此处添加更新数据库代码 } }
构造方法 :
context: 上下文, 应用程序上下文
name: 数据库的名称, 会生成文件 /data/data/com.example.myapplication/databases/dbname.db
factory: 工厂方法, 一般传入 null
version: 版本, 增加则会执行 onUpgrade
这个带两个抽象方法, onCreate 用于创建数据库(不存在的情况)时执行. onUpgrade 用于升级时执行, 当 实例化该类时 版本相比以前增加时执行.
实例化, 创建/获取 数据库
SQLiteData db = new SQLiteData(MainActivity.this, "user.db", null, 1); // 不存在则创建 SQLiteDatabase mydb = db.getWritableDatabase(); // 返回一个 SQLiteDatabase 对象用于更新数据
插入数据
通过操作 getWritableDatase() 返回的 SQLiteDatabase 对象, insert 方法插入数据
ContentValues values = new ContentValues(); values.put(String key, String value); mydb.insert(String table, String nullColumnHack, ContentValues values); values.clear();
更新数据
ContentValues values = new ContentValues(); values.put(String key, T<?> value); SQLiteDatabase.update(String table, ContentValues values, String whereClause, String[] whereArgs);
values: 要更新的新值
whereClause: 约束条件, SQL语句中的 where , 例 : "name=?"
whereArgs: 替换 ? 占位符内容
删除数据
删除数据比较简单
SQLiteDatabase.delete(String table, String whereClause, String[] whereArgs);
查询数据
查询是所有操作中最复杂的, 参数很多, 通过 query 方法返回一个 Cursor 对象操作返回结果.
Cursor SQLiteDatabase.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);
参数解释:
table : 表名
columns : 指定查询的列名
selection : 指定where的约束条件
selectionArgs : 约束条件的值
groupBy : 指定 group by 的列
having : group by 的约束
orderBy : 结果的排序方式
对 Cursor 对象进行操作.
boolean Cursor.moveToFirst(); // 将游标移至第第一行 boolean Cursor.moveToNext(); String Cursor.getString(int index); int Cursor.getColumnIndex(String colName); // 获取列名下标 void Cursor.close();
直接使用SQL
//添加数据 db.execSQL("insert into table(col1, col2, col3) values(?, ?, ?)", new String[]{"val1", "val2", "val3"}); //更新数据 db.execSQL("update from table set col1 = ? where col2 = ?", new String[]{"val1", "val2"}); //删除数据 db.execSQL("delete from table where col1 > ?", new String[]{"val1"}); //查询数据 db.rawQuery("select * from table", null);
(完)
博客链接
相关文章推荐
- 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术
- android 摘要----数据存储全方案,详解持久化技术
- Android之数据存储——持久化技术
- Android基于WIFI实现电脑和手机间数据传输的技术方案研究
- Android基础总结(5)——数据存储,持久化技术
- 数据存储全方案,详解持久化技术
- Android数据持久化技术
- 第六章 数据存储全方案,详解持久化技术
- android(studio)之旅-最简单有用的android数据持久化技术-SharedPreferences
- 第一行代码-第6章 数据存储方案,持久化技术
- android 数据持久化技术
- 数据存储全方案,详解持久化技术
- 数据存储全方案--详解持久化技术
- Android基于WIFI实现电脑和手机间数据传输的技术方案研究
- Android之数据持久化技术一(文件存储)
- 数据存储全方案,详解持久化技术
- 阅读郭林《第一行代码》的笔记——第6章 数据存储全方案,详解持久化技术
- iOS面试题--Model层--数据持久化储存方案
- 第六章 数据存储全方案-详解持久化技术
- Android笔记(二十七)数据持久化技术