Android中常用的数据存储方式简单的大致有三种:①文件存储②SharedPreferences存储③数据库存储
一、Sharedpreferences
存
SharedPreferences是通过xml文件来做数据存储
使用SharedPreferences存储数据的步骤:
1.通过context对象创建一个SharedPreferences对象
2.通过SharedPreferences对象获取一个Editor对象
3.使用Editor对象添加数据
4.提交Editor对象(重要)
SharedPreferences config = getSharedPreferences("config", 0);
SharedPreferences.Editor edit = config.edit();
edit.putString("username","小Z");
edit.putString("password","android studio");
edit.commit();
通过DDMS可以查看文件 /data/data/packname底下
导出到电脑中就可以查看
getSharedPreferences(String name,int mode)有两个参数,第一个毋庸置疑是文件的名字,第二个mode有三种取值:MODE_PRIVATE(0)、MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE(已经不推荐使用,权限不安全),所以一般直接用0
取
取数据方式和存数据差不多:①通过Context对象创建一个SharedPreferences对象
②通过SharePreferences对象取数据
SharedPreferences config = getSharedPreferences("config", 0); //注意这里的文件名要和创建时的一样才行,否则就是新建了
String username = config.getString("username", ""); //这里第二个参数是default_values,这里直接设为了""空串
String password = config.getString("password", "");
Toast.makeText(getApplicationContext(),"username:"+username+" password:"+ password,Toast.LENGTH_SHORT).show();
上面文件名是我们自己指定的,我们还可以通过PreferenceManager来获取一个默认的SharedPreferences对象
SharedPreferences defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
二、数据库存储
SharedPreferences和文件都只适合用来存储少量数据,如果要存储大量结构相同的数据就要用到数据库才行。Android中使用的是嵌入式数据库sqlite,轻量级。与数据库相关的类是SqliteOpenHelper。
创建数据库的步骤:①创建一个类继承SqliteOpenHelper,需要添加一个构造方法,同时实现两个方法onCreate和onUpgrade
public class MySqlite extends SQLiteOpenHelper {
public MySqlite(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version); //factory直接填null就可以
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
<span style="white-space:pre"> </span>//当数据库第一次创建的时候才会被调用:特别适合做数据库的初始化工作,如表结构的创建...
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
<span style="white-space:pre"> </span>//当数据库版本号(构造函数中的version)发生改变是才会执行:特别适合做表结构的修改
}
}
区别:
getReadableDatabase:
先尝试以读写方式打开数据库,如果磁盘空间满了,他会重新尝试以只读方式打开数据库。
getWritableDatabase:
直接以读写方式打开数据库,如果磁盘空间满了,就直接报错。
getReadableDatabase:
先尝试以读写方式打开数据库,如果磁盘空间满了,他会重新尝试以只读方式打开数据库。
getWritableDatabase:
直接以读写方式打开数据库,如果磁盘空间满了,就直接报错。
这样数据库就创建好了.接下来就是增删改查了
getReadableDatabase()和getWriteableDatabase()都返回一个SqliteDatabase对象,通过这个对象我们就可以实现对数据库的操作
1.exeSQL(...)方法,没有返回值,可以用来作增删改
2.rawQuery(...)方法,返回一个Cursor游标,可以用来作查
上面这两种方法需要我们自己编写响应的sql语句
3.通过insert,update,delete,query方法,我们只需要填写响应的参数就行,有返回值
总结:实际使用时,我们通过insert,update,delete方法实现增删改,通过rawQuery方法实现查询,因为query不支持多表查询,而且参数十分复杂
事务:小Z的简单理解就是使若干条sql语句要么都执行成功,要么不执行,避免由于突发事件导致的只执行了一半语句导致的数据库数据错误问题
事务的使用十分简单:
db.beginTransaction();
try {
...
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
三、文件存储
通过Content的openFileInput和openFileOutput创建文件的输入输出流,小Z暂时用的比较少
