package android.api.version18.contentprovider; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.net.Uri; import android.text.TextUtils; public class MyContentProvider extends ContentProvider{ static final String PROVIDER_NAME = "android.api.version18.contentprovider"; static final String URL = "content://" + PROVIDER_NAME + "/students"; static final Uri CONTENT_URI = Uri.parse(URL); static final String _ID = "_id"; static final String NAME = "name"; static final String GRADE = "grade"; DatabaseHelper dbHelper; SQLiteDatabase db; static final int STUDENTS = 1; static final int STUDENT = 2; static final UriMatcher uriMatcher; static{ uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(PROVIDER_NAME, "students", STUDENTS); uriMatcher.addURI(PROVIDER_NAME, "students/#", STUDENT); } @Override public boolean onCreate() { Context context = getContext(); dbHelper = new DatabaseHelper(context); db = dbHelper.getWritableDatabase(); return (dbHelper == null) ? false : true; } @Override public Uri insert(Uri uri, ContentValues values) { //SQLiteDatabase db = dbHelper.getWritableDatabase(); long rowID = db.insert(DatabaseHelper.STUDENTS_TABLE_NAME, "", values); if(rowID > 0){ Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID); return _uri; } return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { //SQLiteDatabase db = dbHelper.getWritableDatabase(); int count = 0; switch(uriMatcher.match(uri)){ case STUDENTS: count = db.delete(DatabaseHelper.STUDENTS_TABLE_NAME, selection, selectionArgs); break; case STUDENT: String id = uri.getPathSegments().get(1); String where_value = _ID + " = " + id; if(selection != null && !"".equals(selection)){ where_value += selection; } count = db.delete(DatabaseHelper.STUDENTS_TABLE_NAME, where_value, selectionArgs); break; default: count = 0; } getContext().getContentResolver().notifyChange(uri, null); return count; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { //SQLiteDatabase db = dbHelper.getWritableDatabase(); int count = 0; switch(uriMatcher.match(uri)){ case STUDENTS: count = db.update(DatabaseHelper.STUDENTS_TABLE_NAME, values, selection, selectionArgs); break; case STUDENT: String id = uri.getPathSegments().get(1); count = db.update(DatabaseHelper.STUDENTS_TABLE_NAME, values, _ID + " = " + id + (!TextUtils.isEmpty(selection) ? " and (" + selection + " )" : ""), selectionArgs); break; default: count = 0; } getContext().getContentResolver().notifyChange(uri, null); return count; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { //SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = null; switch(uriMatcher.match(uri)){ case STUDENTS: cursor = db.query(DatabaseHelper.STUDENTS_TABLE_NAME, projection, selection, selectionArgs, null, null, null); break; case STUDENT: break; } return cursor; } @Override public String getType(Uri arg0) { return null; } private static class DatabaseHelper extends SQLiteOpenHelper{ static final String DATABASE_NAME = "Xuexiao"; static final String STUDENTS_TABLE_NAME = "students"; static final int DATABASE_VERSION = 1; static String CREATE_DB_TABLE = "create table " + STUDENTS_TABLE_NAME + "(_id INTEGER primary key AUTOINCREMENT, " + " name Text NOT null, " + "grade TEXT not null);"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_DB_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { db.execSQL("drop table if exits " + STUDENTS_TABLE_NAME); onCreate(db); } } }
浙公网安备 33010602011771号