I have a custom ContentProvider I use to store fixes obtained from the GPS into a SQLite database. This class overrides ContentProvider methods (delete, insert, query...),
As of API level 11 there is a method ContentResolver.call(Uri, String, String, Bundle) which provides extra flexibility.