数据存储全方案
持久化技术简介
Android系统中主要提供了三种方式用于简单的实现数据持久化功能
- 文件存储
- SharedPreference存储
- 数据库存储
1.文件存储
将数据存储到文件中
Context类下有openFileOutput
方法,将数据存储到指定文件中,第一个参数指定文件名,不可以包含路径,所有的文件都是默认存储到/data/data/<package name>/files/
目录。第二个参数是文件操作模式,MODE_PRIVATE
和MODE_APPEND
openFileOutput
方法返回一个FileOutputStream
对象。
String data = "Data to save";
FileOutputStream out = null;
BufferedWriter writer = null;
try{
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
}catch(IOException e){
e.printStackTrace();
}finally{
try{
if(writer != null){
writer.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
2.SharedPreferences存储
键值对存储
三种方法获取SharedPreferences对象
1.Context类中的getSharedPreferences()
方法,两个参数,第一个指定文件名,SharedPreferences
文件都是存放在/data/data/<package name>/shared_prefs/
目录下的。第二个参数用于指定操作模式,主要有两种模式可以选择,MODE_PRIVATE
和 MODE_MULTI_PROCESS
。 MODE_PRIVATE
仍然是默认的操作模式,和直接传入 0 效果是相同的,表示只有当前的应用程序才可以对这个SharedPreferences
文件进行读写。MODE_MULTI_PROCESS
则一般是用于会有多个线程中对同一个SharedPreferences
文件进行读写的情况。
2.Activity类中的getPreferences()
方法类名作为SharedPreferences的文件名
3.PreferenceManager类中的getDefaultSharedPreferences()
方法它接收一个Context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。
存数据三步
1.调用SharedPreferences对象的edit()
方法来获取一个SharedPreferences.Editor
对象。
2.向SharedPreferences.Editor
对象中添加数据,比如添加一个布尔型数据就使用putBoolean
方法,添加一个字符串则使用putString()
方法,以此类推。
3.调用commit()
方法将添加的数据提交,从而完成数据存储操作。
从SharedPreferences读数据getXXX
方法,通过键值。
3.SQLite数据库存储
SQLiteOpenHelper抽象类,onCreate
和onUpgrade
两个方法必须在子类中重写。在这两个方法中实现 创建 和 升级 数据库的逻辑。
geReadableDatabase
getWritableDatabase
创建或打开一个数据库,并返回一个可对数据库进行读写的对象,磁盘空间已满则,read方法返回只读,write出现异常。
SQLiteOpenHelper中有两个构造方法可供重写,一般使用参数少一点的那个构造方法即可。这个构造方法中接收四个参数:第一个参数是Context。必须要有它才能对数据库进行操作;第二个参数是数据库名,创建数据库时使用的就是这里指定的名称;第三个参数允许我们在查询数据的时候返回一个自定义的Cursor,一般都是传null;第四个参数表示当前数据库的版本号,可用于对数据库进行升级操作,构建出SQLiteOpenHelper的实例之后,再调用它的getReadableDatabase()
或 getWritableDatabase()
方法就能够创建数据库了,数据库文件会存放在/data/data/<package name>/databases/
目录下。
SQLite中的数据类型
- integer 表示整型
- real 表示浮点型
- text 表示文本类型
- blob 表示二进制类型
通过adb检查数据库和表的情况
adb shell
cd 命令进入到/data/data/<package name>/databased/目录下,
并使用
ls 命令查看到该目录里的文件
sqlite3 数据库名
.table 查看表
.schema 查看建表语句
.exit 或 quit 退出数据库的编辑。
db.execSQL("drop table if exists xxx");
onCreate(db);
版本号大于1。onUpgrade方法就会执行。