文件存储
不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件中,适合用于存储一些简单的文本数据或二进制数据。
数据存储
通过openFileOutput()获得FileOutputStream对象,再借助它构建OutputStreamWriter对象,再借助它得到BufferedWriter对象,接着通过BufferedWriter来将文本内容写入到文件中
数据读取
通过openFileInput()得到FileInputStream对象,借助它构造InputStreamReader对象,再构建出BufferedReader对象,就可以通过BufferedReader进行一行一行地读取,并存放到一个StringBuilder对象中,最后将读取到的内容返回
SharedPreferences存储
使用键值对的方式来存储,即保存数据时,需要给数据提供一个对应的键。
数据存储
3种方法可以得到SharedPreferences对象
1.Context类中的getSharedPreferences()
接收两个参数:
第一个参数用于指定文件名,文件存放在/data/data/< package name >/shared_prefs/目录下;
第二个参数用于指定模式,MODE_PRIVATE,表示只有当前的应用程序才可以对这个文件进行读写。其他几种操作模式已被弃用。
2.Activity类中的getPreferences()
和第一个方法相似,不过只接收一个操作模式参数,因为使用这个方法时会自动将当前活动的类名作为文件名
3.PreferenceManager类中的getDefaultSharedPreferences()
是一个静态方法,接收一个Context参数,并自动用当前应用程序的包名作为前缀来命名文件 。
向文件中存储数据分3步:
1.调用SharedPreferences对象的edit()方法获得SharedPreferences.Editor对象
2.向SharedPreferences.Editor对象中添加数据,使用putBoolean()或putString()等方法
3.调用apply()方法将添加的数据提交
数据读取
SQLite数据库存储
创建数据库
SQLiteOpenHelper是一个抽象类,我们需创建一个自己的帮助类去继承它。SQLiteOpenHelper中有两个抽象方法我们必须重写,分别是onCreate()和onUpgrade(),分别在两个方法中实现创建、升级数据可的逻辑。
SQLiteOpenHelper中还有两个非常重要的实例方法:getReadableDatabase()和getWritableDatabase()。用于创建或打开数据库(若数据库存在则直接打开,否则新建),并返回一个可对数据库进行读写操作的对象。当数据库不可写入的时候(如磁盘空间已满),getReadableDatabase()返回的对象将以只读的方式去打开数据库,而getWritableDatabase()则将出现异常。
SQLiteOpenHelper中有两个构造方法可供重写,一般使用参数较少的一个。这个构造方法中接收4个参数:
第一个参数是Context
第二个参数是数据库名
第三个参数允许我们在查询数据的时候返回一个自定义的Cursor,一般传入null
第四个参数表示当前数据库的版本号
数据库文件存放在/data/data/< package name >/databases/目录下
通常在onCreate()中处理创建表的逻辑
升级数据库
添加建表语句
重新运行程序,数据库并不会更新,因为数据库已存在,onCreate()并没有被执行,因此新添加的表无法创建
重写onUpgrade()
需将已经存在的表删除,因为如果在创建的时候发现表已存在,就会直接报错
修改SQLiteOpenHelper构造方法的第四个参数版本号,就能执行onUpgrade()
添加数据
SQLiteDatabase提供了一个insert()方法,接收3个参数:
第一个参数是表名
第二个参数用于在未指定添加数据的情况下给某些可为空的列自动赋值null,一般不用这个功能,直接传入null
第三个参数是一个ContentValues对象
更新数据
SQLiteDatabase的update()方法,接收四个参数:
第一个参数是表名
第二个参数是ContentValues对象
第三、四个参数用于约束更新某一行或某几行的数据,不指定的话默认更新所有行
删除数据
SQLiteDatabase的delete()方法,接收三个参数:
第一个参数是表名
第二、三个参数用于约束更新某一行或某几行的数据,不指定的话默认更新所有行
查询数据
SQLiteDatabase的query()方法,接收七个参数:
调用query()后返回一个Cursor对象,查询到的数据从这个对象中取出