Android 数据存储包括三种:文件存储、SharedPreferences存储、数据库存储(SQLite)。
文件存储
:适合用于存储一些简单的文本数据或二进制数据。
存储路径:/data/data/<应用程序包名>/files
3.使用方法:
FileInputStream openFileInput(String name); 读取文件
FileOutputStream openFileOutput(String name , int mode) 写入文件
4.文件操作模式:
MODE_PRIVATE:为默认操作模式,文件为私有数据。
MODE_APPEND:检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
MODE_WORLD_READABLE:全局读
MODE_WORLD_WRITEABLE:全局写
SharedPreferences存储
存储路径:
/data/data/<应用程序包名>/shared_prefs
SharedPreferences存储的特点:
sharedPerferences是一种轻量级的存储方式。
(2) 只支持JAVA基本数据类型,不支持自定义的数据类型。
(3) 应用内数据可以共享。
(4) 使用简单,方便。
(5) 对少量数据进行存储(配置信息)使用键值对存储(key-value)
3.SharedPreferences的使用:
获取SharedPreferences 对象
getSharedPreferences(String name , int mode)
Name:存储的文件名
Mode:访问模式,设置SharedPreferences对象权限
SharedPreferences prefs = getSharedPreferences("fileName", Context.MODE_PRIVATE);
三种访问模式:
应用私有(MODE_PRIVATE) (目前只用这一种)。
全局读(MODE_WORLD_READABLE) (Android 4.2中弃用)
全局写(MODE_WORLD_WRITEABLE) (Android 4.2中弃用)
读取SharedPreferences文件存储的数据:
通过SharedPreferences对象的键key,获取相应key键值。
常用方法: getString(key,value)、getBoolean(key,value)、getInt(key,value)、getFloat(key,value)、getLong(key,value)
value: 默认返回值
eg:
SharedPreferences prefs = getSharedPreferences("file", Context.MODE_PRIVATE);
String name = prefs.getString("name", null);
int age = prefs.getInt("age", 0);
向SharedPreferences文件存储数据
edit().putString(“string”,value)、edit().putBoolean (“string”,value)、 edit().putInt (“string”,value)
提交数据: commit() & apply()
(1) commit方法有boolean的返回值,apply没有返回值,无法知道存储是否失败。
(2) apply异步提交, commit提交是同步过程,效率更慢。
(3) 在不关心提交结果是否成功的情况下,优先考虑apply方法。
其他方法:
prefs.edit().remove(key).commit(); //移除某个key值
prefs.edit().clear().commit(); //清楚所有数据
prefs.contains(key); //查询某个key是否存在,返回boolean值
prefs.getAll(); //返回所有的键值对返回一个Map<Sting,?>
数据库存储(SQLite)
特点:
安卓自带,轻量级、速度快、占用资源少
存储路径:
/data/data/<应用程序包名>/databases
主要类:
SQLiteOpenHelper 抽象类,用于数据库的创建和升级
必须实现的抽象方法:onCreate() ,onUpgrade()
SQLiteDatabase 数据库操作类,用于数据增删改成操作
insert() 、delete()、 update()、 query()
4.SQLite 的使用:
• 创建数据库帮助类DatabaseHelper继承SQLiteOpenHelper
public DatabaseHelper(Context context, String name, CursorFactory factory, int version)//带全部参数的构造函数,context, 数据库名字,null,版本号
{
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建数据库sql语句 并 执行
String sql = "create table user(name varchar(20))";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists user");
onCreate(db);
}
• 获取数据库的操作对象,同时创建数据库:
DatabaseHelper mDatabase = new DatabaseHelper(getContext(), "usersDataBase.db",null,1);
SQLiteDatabase db= mDatabase .getWritableDatabase() (读写)
SQLiteDatabase db= mDatabase .getReadableDatabase() (只读)
• SQLite 数据操作—增删改查
方法一、使用 insert() 、delete()、 update()、 query()方法:
Ø 插入:
db.insert(tableName,null,value)
Ø 删除:
db.delete(tableName,selection, selectionArgs); 表名,条件,条件值
Ø 修改更新:
db.update(tableName, values, selection, selectionArgs);
Ø 查找:
Cursor cursor = db.query(String table, String[] columns, String selection, String[] selectionArgs,String groupBy, String having,String orderBy)
Cursor类常用方法:
方法二、db.execSQL(sql)
SQL 常用语句:
sql = create table 数据表 (字段1 类型1(长度),字段2 类型2(长度) …… )
sql = "select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"
sql = "select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]”
sql = "delete from 数据表 where 条件表达式”
sql = "update 数据表 set 字段名=字段值 where 条件表达式”
sql = "insert into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)”