@Override public int delete(Uri uri, String selection, String[] selectionArgs) { final SQLiteDatabase db = mOpenHelper.getWritableDatabase(); final int match = sUriMatcher.match(uri); int numDeleted; switch (match) { case FLAVOR: numDeleted = db.delete(MoviesContract.MoviesEntry.TABLE_MOVIES, selection, selectionArgs); // reset _ID db.execSQL( "DELETE FROM SQLITE_SEQUENCE WHERE NAME = '" + MoviesContract.MoviesEntry.TABLE_MOVIES + "'"); break; case FLAVOR_WITH_ID: numDeleted = db.delete( MoviesContract.MoviesEntry.TABLE_MOVIES, MoviesContract.MoviesEntry._ID + " = ?", new String[] {String.valueOf(ContentUris.parseId(uri))}); // reset _ID db.execSQL( "DELETE FROM SQLITE_SEQUENCE WHERE NAME = '" + MoviesContract.MoviesEntry.TABLE_MOVIES + "'"); break; default: throw new UnsupportedOperationException("Unknown uri: " + uri); } return numDeleted; }
@Override public Uri insert(Uri uri, ContentValues values) { final SQLiteDatabase db = mOpenHelper.getWritableDatabase(); Uri returnUri; switch (sUriMatcher.match(uri)) { case FLAVOR: { long _id = db.insert(MoviesContract.MoviesEntry.TABLE_MOVIES, null, values); // insert unless it is already contained in the database if (_id > 0) { returnUri = MoviesContract.MoviesEntry.buildFlavorsUri(_id); } else { throw new android.database.SQLException("Failed to insert row into: " + uri); } break; } default: { throw new UnsupportedOperationException("Unknown uri: " + uri); } } getContext().getContentResolver().notifyChange(uri, null); return returnUri; }
@Override public Cursor query( Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Cursor retCursor; switch (sUriMatcher.match(uri)) { // All Flavors selected case FLAVOR: { retCursor = mOpenHelper .getReadableDatabase() .query( MoviesContract.MoviesEntry.TABLE_MOVIES, projection, selection, selectionArgs, null, null, sortOrder); return retCursor; } // Individual flavor based on Id selected case FLAVOR_WITH_ID: { retCursor = mOpenHelper .getReadableDatabase() .query( MoviesContract.MoviesEntry.TABLE_MOVIES, projection, MoviesContract.MoviesEntry._ID + " = ?", new String[] {String.valueOf(ContentUris.parseId(uri))}, null, null, sortOrder); return retCursor; } default: { // By default, we assume a bad URI throw new UnsupportedOperationException("Unknown uri: " + uri); } } }
@Nullable @Override public Cursor query( Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Cursor retCursor; switch (sUriMatcher.match(uri)) { case MOVIE: retCursor = mOpenHelper .getReadableDatabase() .query( MovieContract.FavoriteMovieEntry.TABLE_FAVORITE_MOVIES, projection, selection, selectionArgs, null, null, sortOrder); return retCursor; case MOVIE_WITH_ID: retCursor = mOpenHelper .getReadableDatabase() .query( MovieContract.FavoriteMovieEntry.TABLE_FAVORITE_MOVIES, projection, MovieContract.FavoriteMovieEntry._ID + " = ?", new String[] {String.valueOf(ContentUris.parseId(uri))}, null, null, sortOrder); return retCursor; default: throw new UnsupportedOperationException("Unknown uri: " + uri); } }
@Override public int bulkInsert(Uri uri, ContentValues[] values) { final SQLiteDatabase db = mOpenHelper.getWritableDatabase(); final int match = sUriMatcher.match(uri); switch (match) { case FLAVOR: // allows for multiple transactions db.beginTransaction(); // keep track of successful inserts int numInserted = 0; try { for (ContentValues value : values) { if (value == null) { throw new IllegalArgumentException("Cannot have null content values"); } long _id = -1; try { _id = db.insertOrThrow(MoviesContract.MoviesEntry.TABLE_MOVIES, null, value); } catch (SQLiteConstraintException e) { Log.w( LOG_TAG, "Attempting to insert " + value.getAsString(MoviesContract.MoviesEntry.COLUMN_TITLE) + " but value is already in database."); } if (_id != -1) { numInserted++; } } if (numInserted > 0) { // If no errors, declare a successful transaction. // database will not populate if this is not called db.setTransactionSuccessful(); } } finally { // all transactions occur at once db.endTransaction(); } if (numInserted > 0) { // if there was successful insertion, notify the content resolver that there // was a change getContext().getContentResolver().notifyChange(uri, null); } return numInserted; default: return super.bulkInsert(uri, values); } }
@Override public int update( Uri uri, ContentValues contentValues, String selection, String[] selectionArgs) { final SQLiteDatabase db = mOpenHelper.getWritableDatabase(); int numUpdated = 0; if (contentValues == null) { throw new IllegalArgumentException("Cannot have null content values"); } switch (sUriMatcher.match(uri)) { case FLAVOR: { numUpdated = db.update( MoviesContract.MoviesEntry.TABLE_MOVIES, contentValues, selection, selectionArgs); break; } case FLAVOR_WITH_ID: { numUpdated = db.update( MoviesContract.MoviesEntry.TABLE_MOVIES, contentValues, MoviesContract.MoviesEntry._ID + " = ?", new String[] {String.valueOf(ContentUris.parseId(uri))}); break; } default: { throw new UnsupportedOperationException("Unknown uri: " + uri); } } if (numUpdated > 0) { getContext().getContentResolver().notifyChange(uri, null); } return numUpdated; }
@Nullable @Override public Uri insert(Uri uri, ContentValues values) { final SQLiteDatabase db = mOpenHelper.getWritableDatabase(); Uri returnUri; switch (sUriMatcher.match(uri)) { case MOVIE: long _id = db.insert(MovieContract.FavoriteMovieEntry.TABLE_FAVORITE_MOVIES, null, values); if (_id > 0) { returnUri = MovieContract.FavoriteMovieEntry.buildMoviesUri(_id); } else { throw new android.database.SQLException("Failed to insert row into: " + uri); } break; default: throw new UnsupportedOperationException("Unknown uri: " + uri); } getContext().getContentResolver().notifyChange(uri, null); return returnUri; }