Android中的数据持久化
数据存储之SharedPreferences
SharedPreferences是用键值对的方式来存储数据的,也就是说当保存一条数据的时候,需要给这个数据提供一个对应的键,同时在取数据的时候就可以通过这个键把相对应的值取出来。
SharedPreferences的特点
- 是一种轻质的数据存储方式
- 本质是基于XML文件存储key-value键值对数据
- 通常用来存储一些简单的配置信息
使用步骤
SharedPreferences对象本身只能获取数据并不支持存储和修改,存储和修改需要Editor对象来实现。
实现SharedPreferences的存储步骤如下:
- 获得SharedPreferences对象
- 获得SharedPreferences.Editor对象
- 通过Editor接口的put方法保存key-value
- 通过Editor接口的commit()方法保存键值对 也可以调用 apply()方法
例如:
SharedPreferences sharedPreferences = getSharedPreferences(“myPref”, MODE_PRIVATE);
这里的MODE_PRIVATE代表的是只能当前程序读取。
Editor editor = sharedPreferences.edit(); // 获取Editor()对象
editor.putString(“name”, “ZhangSan”);
editor.commit(); // commit() 提交生效
String username = sharedPreferences.getString(“name”, “”); // 第一个参数代表我们用’name’这个key所存储的值 第二个参数代表的是username默认的值 如果没有找到就用默认值来代替
数据存储之SQLite
什么是SQLite
SQLite是一款轻量级的关系型数据库,还遵循数据库的ACID事务。SQLite支持null, integer, reak, text和blob数据类型。并且SQLite没有用户概念,不支持网络传播。
Android中的使用
SQLiteDatabase
- 提供了一些管理SQLite数据库的类
- 提供创建、删除、执行SQL命令,并执行其他常见的数据库管理任务的方法。
- 每个程序的数据库名字是唯一的
常用方法
- db.execSQL(sql) //执行任何SQL语句
- db.insert(table, nullColumnHack, values)
- db.delete(table, whereClause, whereArgs)
- db.update(table, values, whereClause, whereArgs)
- db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)
- db.rawQuery(sql, selectionArgs)
SQLiteDatabase db = openOrCreateDatabase(name, mode, factory);
* @param myDB.db 数据库的名字,最好以”.db”结尾,这样导出到外部的时候不需要再转格式
* @param MODE_PREIVATE 设置模式,私有(只能该应用程序访问),只读,读写等。
* @param CursorFactory 游标工厂。
* @openOrCreateDatabase 代表这个数据库没有的话会帮你创建,有的话会帮你直接打开。
db.execSQL(“create table if not exists user(_id integer primary key autoincrement)”);
Cursor
Cursor是android查询数据后得到的一个管理数据集合的类。
- Cursor:游标接口,提供遍历查询结果的方法
- getCount():总记录条数
- isFirst():判断是否第一条记录
- isLast():判断是否最后一条记录
- moveToFirst():移动到第一条记录
- moveToLast():移动到最后一条记录
- move(int offset):移动到指定记录
- moveToNext():移动到下一条记录
我们在使用游标的时候,可以让它先移动到第一条 moveToFirst(); 然后再移动到下一条,moveToNext();
例如:
我们可以直接使用SQL语句的方式。
db.rawQuery(sql, selectionArgs); 返回值是Cursor 第二个参数是查询条件的参数值
代码如下:
SQLiteDatabase db = openOrCreateDatabase("user.db", MODE_PRIVATE, null);
db.execSQL("create table if not exists user(_id integer primary key autoincrement, name text not null, sex text not null, age integer not null)");
db.execSQL("insert into user(name, sex, age) values ('ZhangSan', 'man', '23')");
Cursor cursor = db.rawQuery("select * from user", null);
if(cursor!=null){
while(cursor.moveToNext()){
Log.i("info", "_id" + cursor.getInt(cursor.getColumnIndex("_id")));
Log.i("info", "name" + cursor.getString(cursor.getColumnIndex("name")));
Log.i("info", "age" + cursor.getInt(cursor.getColumnIndex("age")));
Log.i("info", "sex" + cursor.getString(cursor.getColumnIndex("sex")));
}
cursor.close();
}
db.close();
同时我们还可以使用SQLite()中提供的方式:
ContentValues values = new ContentValues();
values.put("name", "WZH");
values.put("sex", "female");
values.put("age", 23);
db.insert("user", null, values);
values.clear();