ContentProvider使用完整示例(一)――自定义ContentProvider(三)

2014-11-24 12:57:10 · 作者: · 浏览: 1
: * 要求personid为2且name为xiaoming1 * 所以在查询时分为两步: * 第一步: * 解析出personid放入where查询条件 * 第二部: * 判断是否有其他限制(如name),若有则将其 * 组拼到where查询条件. * 详细代码见下. */ @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteDatabase db=dbOpenHelper.getWritableDatabase(); Cursor cursor; switch (URI_MATCHER.match(uri)) { //查询表 case PERSONS: cursor=db.query("person", projection, selection, selectionArgs, null, null, sortOrder); break; //按照id查询某条数据 case PERSON: //第一步: long id=ContentUris.parseId(uri); String where="personid="+id; //第二步: if(selection!=null&&!"".equals(selection.trim())){ where=selection+" and "+where; } cursor=db.query("person", projection, where, selectionArgs, null, null, sortOrder); break; default: throw new IllegalArgumentException("unknown uri"+uri.toString()); } return cursor; } /** * 返回当前Uri所代表的数据的MIME类型. * 如果该Uri对应的数据可能包含多条记录,那么返回 * 字符串应该以"vnd.android.cursor.dir/"开头 * 如果该Uri对应的数据只包含一条记录,那么返回 * 字符串应该以"vnd.android.cursor.item/"开头 */ @Override public String getType(Uri uri) { switch (URI_MATCHER.match(uri)) { case PERSONS: return "vnd.android.cursor.dir/persons"; case PERSON: return "vnd.android.cursor.item/person"; default: throw new IllegalArgumentException("unknown uri"+uri.toString()); } } }
DBOpenHelper如下:

package cn.testcontentprovider;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBOpenHelper extends SQLiteOpenHelper {
	public DBOpenHelper(Context context) {
		super(context, "contentprovidertest.db", null, 1);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL("create table person(personid integer primary key autoincrement,name varchar(20),phone varchar(12),salary  Integer(12))");		
	}

	//当数据库版本号发生变化时调用该方法
	@Override
	public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
		//db.execSQL("ALTER TABLE person ADD phone varchar(12) NULL");
		//db.execSQL("ALTER TABLE person ADD salary  Integer NULL");
	}

}

AndroidManifest.xml如下: