@Override public int delete(Uri url, String where, String[] whereArgs) { SQLiteDatabase db = mOpenHelper.getWritableDatabase(); int count; switch (URI_MATCHER.match(url)) { case CONTACTS: count = db.delete(TABLE_ROSTER, where, whereArgs); break; case CONTACT_ID: String segment = url.getPathSegments().get(1); if (TextUtils.isEmpty(where)) { where = "_id=" + segment; } else { where = "_id=" + segment + " AND (" + where + ")"; } count = db.delete(TABLE_ROSTER, where, whereArgs); break; default: throw new IllegalArgumentException("Cannot delete from URL: " + url); } getContext().getContentResolver().notifyChange(GROUPS_URI, null); notifyChange(); return count; }
@Override public Uri insert(Uri url, ContentValues initialValues) { if (URI_MATCHER.match(url) != CONTACTS) { throw new IllegalArgumentException("Cannot insert into URL: " + url); } ContentValues values = (initialValues != null) ? new ContentValues(initialValues) : new ContentValues(); for (String colName : RosterConstants.getRequiredColumns()) { if (values.containsKey(colName) == false) { throw new IllegalArgumentException("Missing column: " + colName); } } SQLiteDatabase db = mOpenHelper.getWritableDatabase(); long rowId = db.insert(TABLE_ROSTER, RosterConstants.USER_ID, values); if (rowId < 0) { throw new SQLException("Failed to insert row into " + url); } Uri noteUri = ContentUris.withAppendedId(CONTENT_URI, rowId); notifyChange(); return noteUri; }
@Override public Cursor query( Uri url, String[] projectionIn, String selection, String[] selectionArgs, String sortOrder) { SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder(); int match = URI_MATCHER.match(url); String groupBy = null; switch (match) { case GROUPS: qBuilder.setTables(TABLE_ROSTER + " " + QUERY_ALIAS); groupBy = RosterConstants.GROUP; break; case GROUP_MEMBERS: qBuilder.setTables(TABLE_ROSTER + " " + QUERY_ALIAS); qBuilder.appendWhere(RosterConstants.GROUP + "="); qBuilder.appendWhere(url.getPathSegments().get(1)); break; case CONTACTS: qBuilder.setTables(TABLE_ROSTER + " " + QUERY_ALIAS); break; case CONTACT_ID: qBuilder.setTables(TABLE_ROSTER + " " + QUERY_ALIAS); qBuilder.appendWhere("_id="); qBuilder.appendWhere(url.getPathSegments().get(1)); break; default: throw new IllegalArgumentException("Unknown URL " + url); } String orderBy; if (TextUtils.isEmpty(sortOrder) && match == CONTACTS) { orderBy = RosterConstants.DEFAULT_SORT_ORDER; // 默认按在线状态排序 } else { orderBy = sortOrder; } SQLiteDatabase db = mOpenHelper.getReadableDatabase(); Cursor ret = qBuilder.query(db, projectionIn, selection, selectionArgs, groupBy, null, orderBy); if (ret == null) { infoLog("RosterProvider.query: failed"); } else { ret.setNotificationUri(getContext().getContentResolver(), url); } return ret; }
@Override public int update(Uri url, ContentValues values, String where, String[] whereArgs) { int count; long rowId = 0; int match = URI_MATCHER.match(url); SQLiteDatabase db = mOpenHelper.getWritableDatabase(); switch (match) { case CONTACTS: count = db.update(TABLE_ROSTER, values, where, whereArgs); break; case CONTACT_ID: String segment = url.getPathSegments().get(1); rowId = Long.parseLong(segment); count = db.update(TABLE_ROSTER, values, "_id=" + rowId, whereArgs); break; default: throw new UnsupportedOperationException("Cannot update URL: " + url); } notifyChange(); return count; }
public static void clearDatabase() { mOpenHelper.clearDatabase(); }