DBOpenHelper.getWritableDatabase()返回SQLiteDatabase对象。
SQLiteDatabase类的公共方法insert()、delete()、update()和query(),封装了执行的添加、删除、更新和查询功能的SQL命令。
1.添加功能
首先构造一个ContentValues对象;其次调用ContentValues对象的put()方法,将每个属性的值写入ContentValues对象中;最后使用SQLiteDatabase对象的insert()方法,将ContentValues对象中的数据写入指定的数据库表中。
insert()方法的返回值是新数据插入的位置,即ID值。ContentValues类是一个数据承载容器,主要用来向数据库表中添加一条数据。
代码清单 insert
public long insert(People people) {
ContentValues newValues = new ContentValues();
newValues.put(KEY_NAME, people.Name);
newValues.put(KEY_AGE, people.Age);
newValues.put(KEY_HEIGHT, people.Height);
return db.insert(DB_TABLE, null, newValues);
}
2.删除功能
删除数据比较简单,只需要调用当前数据库对象的delete()方法,并指明表名称和删除条件即可。
代码清单 删除
public long deleteAllData() {
return db.delete(DB_TABLE, null, null);
}
public long deleteOneData(long id) {
return db.delete(DB_TABLE, KEY_ID + "=" + id, null);
}
其中,delete()方法的第1个参数是数据库的表名称,第2个参数是删除条件。在第2行代码中,删除条件为null,表示删除表中的所有数据;第6行代码指明了需要删除数据的id值,因此deleteOneData()方法仅删除一条数据,此时delete()方法的返回值表示被删除的数据的数量。
3.更新功能
更新数据同样要使用ContentValues对象,首先构造ContentValues对象,其次调用put()方法将属性的值写入ContentValues对象中,最后使用SQLiteDatabase对象的update()方法,并指定数据的更新条件。
代码清单 更新
public long updateOneData(long id , People people){
ContentValues updateValues = new ContentValues();
updateValues.put(KEY_NAME, people.Name);
updateValues.put(KEY_AGE, people.Age);
updateValues.put(KEY_HEIGHT, people.Height);
return db.update(DB_TABLE, updateValues, KEY_ID + “=” + id, null);
}
4.查询功能
首先介绍Cursor类。在Android系统中,数据库查询结果的返回值并不是数据集合的完整复制,而是返回数据集的指针,这个指针就是Cursor类。Cursor类支持在查询的数据集合中多种移动方式,并能够获取数据集合的属性名称和序号。
表 Cursor类的方法和说明
方法 | 说明 |
moveToFirst | 将指针移动到第一条数据上,返回boolean类型值,为true表示指针移动成功 |
moveToNext | 将指针移动到下一条数据上,返回boolean类型值,为true表示指针移动成功 |
moveToPrevious | 将指针移动到上一条数据上,返回boolean类型值,为true表示指针移动成功 |
getCount | 获取集合的数据数量 |
getColumnIndexOrThrow | 返回指定属性名称的序号,如果属性不存在则产生异常 |
getColumnName | 返回指定序号的属性名称 |
getColumnNames | 返回属性名称的字符串数组 |
getColumnIndex | 根据属性名称返回序号 |
moveToPosition | 将指针移动到指定的数据上,返回boolean类型值,为true表示指针移动成功 |
getPosition | 返回当前指针的位置 |
从Cursor中提取数据可以参考ConvertToPeople()方法的实现方法,具体代码如下所示。
代码清单 从Cursor中提取数据
private People[] ConvertToPeople(Cursor cursor){
int resultCounts = cursor.getCount();
if (resultCounts == 0 || !cursor.moveToFirst()){
return null;
}
People[] peoples = new People[resultCounts];
for (int i = 0 ; i
根据id查询数据的代码和查询全部数据的代码如下所示。
代码清单 id查询数据和查询全部数据的代码
public People[] getOneData(long id) {
Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_AGE, KEY_HEIGHT}, KEY_ID + "=" + id, null, null, null, null);
return ConvertToPeople(results);
}
public People[] getAllData() {
Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_AGE, KEY_HEIGHT}, null, null, null, null, null);
return ConvertToPeople(results);
}