Android系统中主要提供了三种方式用于简单实现数据持久化功能,即文件存储、SharedPreference存储以及数据库存储,当然,我们也可以将数据保存在手机的SD卡中,只是上面提到的三种方式使用起来更加简单,安全。
文件存储
写文件:Context类中提供了一个openFileOutput()方法,接收两个参数,第1个为文件的名字,注意这里不包括文件的路径,所有的文件都默认存储到/data/data/<packagename>/files/目录下;第2个为文件的操作模式,有两种模式MODE_PRIVATE(默认)和MODE_APPEND
读文件:Context类中提供了一个openFileInput()方法,只接收一个参数,为文件的名字,也是不包含路径,默认到/data/data/<packagename>/files/目录下读取文件。
SharedPreference
获取SharedPreference对象有以下三种方法:
1. Context类的getSharedPreferences()方法,接收两个参数,第1个为文件的名字,文件默认存储在/data/data/<packagename>/shared_prefs/目录下;第2个为文件的操作模式,有两种模式MODE_PRIVATE和MODE_MULTI_PROCESS。
2. Activity类中的getPreferences()方法,只接收一个参数,文件的操作模式。默认将当前Activity的类名作为文件名。
3. PreferenceManager类中的getDefaultSharedPreferences()方法,默认将当前包名作为文件名。
SharedPreferences存储数据步骤:
1. 调用SharedPreferences对象的edit()方法来获取SharedPreferences.Editor对象
2. 向SharedPreferences.Editor对象添加数据,使用putString(),putInt()…等方法
3. 调用commit()方法将添加的数据提交,从而完成数据存储操作
SharedPreferences读取数据步骤:
调用SharedPreferences对象的一系列get()方法直接读取数据,如getString()、getInt()等
数据库
Android提供了一个SQLiteOpenHelper帮助类方便我们对数据库进行创建和升级。它是一个抽象类,其中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类中重写这两个方法,然后分别在这两个方法中实现创建、升级数据库的逻辑。一般使用SQLiteOpenHelper(Context, 数据库名, null, 版本号)这个构造方法,得到该类的实例后,我们再调用它的getReadableDatabase()或getWritableDatabase()方法就能够创建数据库了,数据库文件默认存放在/data/data/<packagename>/databases/目录下。通常在onCreate()中处理一些创建表的逻辑,而在onUpgrade()方法中对数据库进行升级逻辑处理。
常用API
添加数据:db.insert(table, nullColumnHack, ContentValues)
更新数据:db.update(table, ContentValues, whereClause, whereArgs)
删除数据:db.delete(table, whereClause, whereArgs)
查询数据:查询数据比较复杂,重载的方法至少有七个参数,我们看下这七个参数的含义
query()方法参数 | 对应SQL部分 | 描述 |
table | from table_name | 指定查询的表名 |
columns | select column1, column2 | 指定查询的列名 |
selection | where column = value | 指定where的约束条件 |
selectionArgs | - | 为where中的点位符提供具体的值 |
groupBy | group by column | 指定需要group by的列 |
Having | having column = value | 对group by后的结果进一步约束 |
orderBy | order by column1, column | 指定查询结果的排序方式 |
Android为我们提供了很多非常方便的API操作数据库,但当时,也支持我们直接使用SQL语句操作数据库,比如,增加数据、删除数据、更新数据,我们都可以直接使用db.execSQL(“SQL语句”) 的方式来操作数据库,而查询数据的话可以使用db.rawQuery(“SQL语句”)来操作数据库。