12.1.5. 查询数据
优质
小牛编辑
132浏览
2023-12-01
12.1.5.查询数据
通过Content Provider查询数据,我们需要覆盖query()方法。这个方法的参数有很多,不过大多只是原样交给数据库即可,我们不需要多做修改。
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
long id = this.getId(uri); //
SQLiteDatabase db = statusData.dbHelper.getReadableDatabase(); //
if (id < 0) {
return db.query(StatusData.TABLE, projection, selection, selectionArgs, null,
null, sortOrder); //
} else {
return db.query(StatusData.TABLE, projection, StatusData.C_ID + "=" + id, null, null, null,
null); //
}
}
- 通过辅助方法getId()获取URI中的ID。
- 打开数据库,只读模式。
- 如果不存在ID,我们简单将本方法中的参数原样交给数据库。留意,数据库的insert()方法有两个额外的参数,分别对应SQL语句的GROUPING和HAVING部分。Content Provider中没有它们的对应物,因此设为null。
- 如果存在ID,则使用ID作为WHERE语句的唯一参数,返回对应的记录。
Note:
关闭数据库的同时会销毁Cursor对象,因此我们在读取数据完毕之前不能关闭数据库,而Cursor对象的生存周期则需要使用者负责管理。针对这一情景,可以利用Activity的startManagingCursor()方法。