目录
一. SharedPreferences
SharedPreferences 属于轻量级的键值对存储方式,支持基本数据类型存储,所保存的数据会以xml格式文件储存在手机内存。
1.使用 SharedPreferences 储存数据
首先需要获取到 SharedPreferences 对象。主要有如下方法。
//第一个参数为文件名称,第二个为操作模式(目前只有MODE_PRIVATE模式)
SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE);
//使用时自动将当前活动类名作为文件名
SharedPreferences pref = getPreferences(MODE_PRIVATE);
//参数为Context,自动使用当前包名作为前缀命名文件。
SharedPreferences pref = getDefaultSharedPreferences(this);
然后调用SharedPreferences 对象的edit()获取一个SharedPreferences.Editor对象,利用这个对象添加数据,调用apply()
方法提交完成存储。例子如下:
存储什么数据类型,就调用对应的put方法。
2.获取 SharedPreferences 中数据
同样先根据名称获取SharedPreferences 对象,再调用get方法获取相应数据。例子如下:
其中get方法第二个参数为缺省值,如果没有找到对应值就会用缺省值代替赋值。
二. SQLite
SharedPreferences 只能存储一些简单数据和键值对,当需要存储大量复杂关系型数据时,使用SQLite数据库比较适合。
SQLite是一款轻量级的关系型数据库,适合移动设备使用,是Android 内置的数据库。
1.创建数据库
android 专门提供了 SQLiteOpenHelper 帮助类来进行数据库的建立和升级。这是一个抽象类,我们通过继承它并建立构造函数,重写onCreate(),onUpgrade()方法。在这两个方法内实现创建,升级数据库逻辑。在操作数据库时需要了解一点SQL语句。
建表语句:
create table tableName(
id integer primary key autoincrement,//primary key 将id列为主键,autoincrement表示id列
//自增长
attrName type) //attrName为属性名,type为其类型。常见有integer表整型,real浮点型,text文本型
创建例子:
SQLIiteOpenHelper中有2个构造函数可供重写(一般使用参数少的),图中第一个参数为Context,有他才能对数据库操作。第二个为数据库名字。第三个允许我们在查询数据时返回一个自定义的Cursor,一步传入null。第四个为数据库版本号,可用于对数据库升级。构建SQLiteOpenHelper实例后,调用它的getReadableDatabase()或getWritableDatabase()方法创建数据库。
myDatebaseHelper helper = new myDatabaseHelper(this,"BOOK",null,1);
helper.getReadableDatabase(); // 或 helper.getWritableDatabase();
SQLiteOpenHelper 有两个重要的实例方法:getReadableDatabase() 和 getWritableDatebase()。两者都可以创建或打开数据库,并返回一个可对数据库进行读写操作的对象。但当数据库不可写入时,前者返回对象以只读方式打开数据库,后者出现异常。
2.升级数据库
SQLOpenHelper中的onUpgrade()方法用来对数据库进行升级。假设我们想在数据库中增加一张表,如果直接在SQLOpenHelper的onCreate()中添加执行建新表代码是无效的,原因是数据库已建立,onCreate()不会再次执行。所以应利用onUpgrade()方法。
先在onCreate()添加建表语句:
db.execSQL(CREATE_CATEGORY); //CREATE_CATEGORY为新表建表语句,Category为新表名字
然后在onUpgrade()中添加逻辑:
SQLiteOpenHelper构造方法的第四个参数为数据库版本号,为了让onUpgrade()执行,需改变版本号。之前我们传入为1,现在需传入一个比1大的数。
myDatabaseHelper helper = new myDatabaseHelper(this,"BOOK",null,2);
3.数据的增删查改
我们可以利用SQLiteOpenHelper 的 getReadableDatabase() ,getWritableDatabase()所返回的SQLiteDatabase()对象对数据进行增删查改。
① 增加数据:SQLiteDatebase提供insert方法来添加数据。
第一个参数为表名,第二个参数在未指定添加数据的情况下给某些可为空的列自动赋值NULL,一般传入null。第三个参数是一个
ContentValues对象,它提供一系列的put()方法重载,用于向ContentValues添加数据,只需将表中每个列名以及相应插入数据传入即可。
② 更新数据 :SQLiteDatebase提供update方法来更新数据。
第一个参数是表名,第二个同样是ContentValues,用来储存更新的数据。第三,四个参数指明更新哪几行的数据。图中是指更新name列 值为 book1 那一行的数据。其中?为占位符,可在第四个参数提供字符串数组表示占位符相应内容。
③ 删除数据:SQLiteDatebase提供delete方法来删除数据。
SQLiteDatabase db = helper.getWritableDatabase();
db.delete("Book","pages > ?", new String[]{"260"});
第一个参数为表名,第二个参数,第三个参数用来指明删除哪些行数据(跟更新同理 ),不指定默认删除全部。
④ 查询数据:SQLiteDatebase提供query方法来更新数据。
查询操作比较复杂,query最短的一个方法重载也有7个参数。但多数情况下只需要传入几个参数就可以完成查询。调用query()方法会返回一个Cursor对象,查询所得数据通过此对象获得。
query()方法参数 | 描述 |
table | 查询表名 |
columns | 查询列名 |
selection | where的约束条件 |
selectionArgs | 为where中占位符提供具体值 |
groupBy | 指定group by 的列 |
having | 对group by后的结果进一步约束 |
orderBy | 指定查询结果的排列方式 |
一个简单例子:
调用Cursor的get方法得到所需数据。