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); //

}

}

  1. 通过辅助方法getId()获取URI中的ID。
  2. 打开数据库,只读模式。
  3. 如果不存在ID,我们简单将本方法中的参数原样交给数据库。留意,数据库的insert()方法有两个额外的参数,分别对应SQL语句的GROUPING和HAVING部分。Content Provider中没有它们的对应物,因此设为null。
  4. 如果存在ID,则使用ID作为WHERE语句的唯一参数,返回对应的记录。

Note:

关闭数据库的同时会销毁Cursor对象,因此我们在读取数据完毕之前不能关闭数据库,而Cursor对象的生存周期则需要使用者负责管理。针对这一情景,可以利用Activity的startManagingCursor()方法。