package practise.lxm.myProvider; import android.net.Uri; import android.provider.BaseColumns; /** * Created by Administrator on 2015/4/9. * 工具类,提供给调用该ContentProvider的ContentResolver */ public class Words { public static final String AUTHORITY = "lxm.practise.provide"; //单词表列名类 public static class Word implements BaseColumns{ //允许操作的列 public static final String _ID = "_id"; public static final String WORD = "word"; public static final String DETAIL = "detail"; //提供的两个uri public static final Uri ALL_WORDS = Uri.parse("content://" + AUTHORITY + "/words"); public static final Uri ONE_WORD = Uri.parse("content://" + AUTHORITY + "/word"); } }
package practise.lxm.myProvider; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; /** * Created by Administrator on 2015/4/9. */ public class MyProvider extends ContentProvider { public static final String TABLE_NAME= "words"; //操作数据库 private MySQLiteOpenDataBase dbHelper ; //UriMatcher private static UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //注册代码 private static final int ALL_WORDS_CODE = 1; private static final int WORDS_ID_CODE = 2; static { uriMatcher.addURI(Words.AUTHORITY,"words",ALL_WORDS_CODE); uriMatcher.addURI(Words.AUTHORITY,"word/#",WORDS_ID_CODE); } @Override public boolean onCreate() { dbHelper = new MySQLiteOpenDataBase(this.getContext(),"MyProvider.db3",1); return true; } //查询 @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteDatabase db = dbHelper.getReadableDatabase(); //获取数据库操作对象 switch (uriMatcher.match(uri)){ //查询所有 case ALL_WORDS_CODE: return db.query(TABLE_NAME,projection,selection,selectionArgs,null,null,sortOrder); case WORDS_ID_CODE: //根据id查询 long id= ContentUris.parseId(uri); String wordsWhere = Words.Word._ID + " =" + id; if(selection != null && selection.length() > 0){ wordsWhere += " and " + selection; } return db.query(TABLE_NAME,projection,wordsWhere,selectionArgs,null,null,sortOrder); default: //未知 throw new IllegalArgumentException("未知的Uri:" + uri.toString()); } } //获取类型 @Override public String getType(Uri uri) { switch (uriMatcher.match(uri)){ case ALL_WORDS_CODE: //多项 return "vnd.android.cursor.dir/practise.lxm.myProvider.Word"; case WORDS_ID_CODE: //单项 return "vnd.android.cursor.item/practise.lxm.myProvider.Word"; default: //未知 throw new IllegalArgumentException("未知的Uri:" + uri.toString()); } } //新增 @Override public Uri insert(Uri uri, ContentValues values) { SQLiteDatabase db = dbHelper.getWritableDatabase();//获取操作数据库对象 switch (uriMatcher.match(uri)){ case ALL_WORDS_CODE: //新增到数据库 long row_id = db.insert(TABLE_NAME,null,values); if(row_id > 0) { //新增成功 Uri newUri = ContentUris.withAppendedId(uri, row_id); //通知数据已改变 getContext().getContentResolver().notifyChange(newUri,null); return newUri; } break; default: //未知 throw new IllegalArgumentException("未知的Uri:" + uri.toString() + " code:" + uriMatcher.match(uri)); } return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { SQLiteDatabase db = dbHelper.getReadableDatabase();//获取操作数据库对象 int delCount = 0; //删除的数量 switch (uriMatcher.match(uri)){ case WORDS_ID_CODE: //单项 //添加删除条件,id为指定值 long delId = ContentUris.parseId(uri); String delWhere = Words.Word._ID + "=" + delId; if(selection != null && selection.length() > 0){ delWhere += " and " + selection; } //执行删除 delCount = db.delete(TABLE_NAME,delWhere,selectionArgs); break; case ALL_WORDS_CODE: //删除多项 delCount = db.delete(TABLE_NAME,selection,selectionArgs); default: //未知 throw new IllegalArgumentException("未知的Uri:" + uri.toString()); } //通知数据已更改 getContext().getContentResolver().notifyChange(uri,null); return delCount; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { SQLiteDatabase db = dbHelper.getWritableDatabase();//获取操作数据库对象 int updateCount = 0; //更新的数量 switch (uriMatcher.match(uri)){ case WORDS_ID_CODE: //单项 //添加修改条件,id为指定值 long updateId = ContentUris.parseId(uri); String updateWhere = Words.Word._ID + "=" + updateId; if(selection != null && selection.length() > 0){ updateWhere += " and " + selection; } //执行删除 updateCount = db.update(TABLE_NAME,values, updateWhere,selectionArgs); break; case ALL_WORDS_CODE: //删除多项 updateCount = db.update(TABLE_NAME,values, selection,selectionArgs); default: //未知 throw new IllegalArgumentException("未知的Uri:" + uri.toString()); } //通知数据已更改 getContext().getContentResolver().notifyChange(uri,null); return updateCount; } }
原文地址:http://blog.csdn.net/lixuemei45/article/details/44961847