Android中的数据存储
为了保存永久性的应用数据,Android 主要提供了以下几种数据存储方式?
- SharedPreferences
- 内部存储(Internal Storage)
- 外部存储(External Storage)
- SQLite数据库存储
- 网络存储
使用SharedPreference存储数据
SharedPreference介绍
SharedPreferences的API:
getSharedPreferences:此方法用于获取SharedPreferences的+++对象
putxxx 方法:putxxx方法通过key-value对,将数据保存到XML文件中。。
commit 方法:对putXXX方法提供的数据进行保存。
getxxx 方法:通过SharedPreferences.getxxx的方法获取保存的key-value对的值
SharedPreferences保存数据的步骤:
- 根据Context获取SharedPreferences对象mySP=getSharedpeferences(TABLE_NAME,
Activity.MODE_PRIVATE); - 利用edit()方法获取Editor对象 editor=mySP.edit();
- 通过Editor对象存储key-value键值对数据 editor.putString(“name”,”李鹏”);
- 通过commit()方法提交数据 editor.commit();
SharedPreference存储数据实例
文件存储在data\data\项目包名\shared prefs下,通过File Explorer可查看并导出
访问应用程序中的文件
先通过openFileOutput方法对文件进行写入,然后通过openFileInput方法对文件进行读取,并将文件内容显示到EditView组件中
使用文件存储数据
Android系统提供的能够简化读写流式文件过程的函数,主要用到的两个类和两种方法:
FileOutputStream
InputStream
openFileOutput(写入文件)
openFileInput(读文件)
文件存储在data\data\项目包名\files下,通过File Explorer可查看并导出
SD卡存储
对于大文件,可以把它存放在SDCard中。在操作SDCrad之前先要判断Sdcard的状态,只有在SdCard是可读写状态才能对其进行数据操作。
SDCard的状态通过**Environment.getExternalStorageState()**方法得到
如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
写入文件到SDCrad实例
- 先判断SDCard是否处于挂载并可写入状态
- 获取SDCrad路径,创建文件
- 通过FileOutputStream方法写入到SDCrad
使用SQLite数据库存储数据
SQLite数据库基本操作
SQLiteDatabase常用方法 | 方法描述 |
---|---|
openOrCreateDatabase (Stringpath,SQLiteDatabase.CursorFactory factory) | 打开或创建数据库 |
insert (String table,String nullColumnHack,Content Values values) | 添加一条记录 |
query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy,String having,String orderBy) | 查询一条记录 |
delete (String table,String whereClause,String[] whereArgs) | 删除一条记录 |
update (String table,ContentValues values,String whereClause,String[] whereArgs) | 修改记录 |
execSQL (String sql) | 执行一条SQL语句 |
close() | 关闭数据库 |
- 创建和打开数据库
SQLiteDatabase db= openOrCreateDatabase("test.db",MODE_PRIVATE,null);
- 创建表
String sql = "CREATE TABLE friend(" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"name VARCHAR(10) , " +
"phone VARCHAR(11) , " +
"category VARCHAR(4) )" ;
db.execSQL(sql);
- 数据的添加
1.使用insert方法
ContentValues cv = new ContentValues();//实例化一个ContentValues用来装载待插入的数据cv.put("username","Jack");//添加用户名
cv.put("password",“123456"); //添加密码
db.insert("user",null,cv);//执行插入操作
2.使用execSQL方式来实现
String sql = "insert into user(username,password) values ('Jack',‘123456') ";//插入操作的SQL语句
db.execSQL(sql);//执行SQL语句
- 数据的删除
1.使用delete方法
String whereClause = "username=?";//删除的条件
String[] whereArgs = {"Jack"};//删除的条件参数
int rows=db.delete("user",whereClause,whereArgs);//执行删除
2.使用execSQL方式来实现
String sql = "delete from user where username='Jack '";//删除操作的SQL语句
db.execSQL(sql);//执行删除操作
- 数据的修改
1.使用update方法
ContentValues cv = new ContentValues();//实例化cv.put("password",“111111");//添加要更改的字段及内容
String whereClause = "username=?";//修改条件
String[] whereArgs = {"Jack"};//修改条件的参数
db.update("user",cv,whereClause,whereArgs);//执行修改
2.使用execSQL方式来实现
String sql = "update [user] set password = ‘111111' where username='Jack'";//修改的SQL语句
db.execSQL(sql);//执行修改
- 数据的查询
1.通过query()方法实现查询
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
table:表名称
colums:查询结果中包含的列名称数组
selection:条件子句,相当于where
selectionArgs:条件语句的参数数组
groupBy:分组
having:分组条件
orderBy:排序类
limit:分页查询的限制
Cursor:返回值,相当于结果集ResultSet
String table = "employee"; // 表名
String[] columns = { "email", "name", "salary", "tel" }; // 字段列表,如果查询所有字段的值,则可以为null
String whereClause = null; // where子句
String[] whereArgs = null; // whereClause参数中各?对应的值
String groupBy = null; // 用于使用了聚合函数后的结果分组
String having = null; // 用于使用了group by子句后的筛选
String orderBy = null; // 用于确定查询结果的排序方式,如果为null,表示默认排序
Cursor c = db.query(table, columns, whereClause, whereArgs, groupBy,having, orderBy);
2.通过rawQuery实现的带参数查询
Cursor c = db.rawQuery("select * from user where username=?",new Stirng[]{"Jack"});
if(cursor.moveToFirst()) {
String password = c.getString(c.getColumnIndex("password"));
}