android content provider 使用




import cn.itcast.service.DBOpenHelper;
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;


public class PersonProvider extends ContentProvider {
private DBOpenHelper dbOpenHelper;
//在不匹配路径时返回 UriMatcher.NO_MATCH 也就是“ -1 ”
private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
private static final int PERSONS = 1;
private static final int PERSON = 2;
static{
MATCHER.addURI("cn.itcast.providers.personprovider", "person", PERSONS);
MATCHER.addURI("cn.itcast.providers.personprovider", "person/#", PERSON);
}
//删除person表中的所有记录   /person
//删除person表中指定id的记录 /person/10
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
int count = 0;
switch (MATCHER.match(uri)) {
case PERSONS:
count = db.delete("person", selection, selectionArgs);
return count;

case PERSON:
long id = ContentUris.parseId(uri);
String where = "personid="+ id;
if(selection!=null && !"".equals(selection)){
where = selection + " and " + where;
}
count = db.delete("person", where, selectionArgs);
return count;

default:
throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());
}
}


@Override
//该方法用于返回当前Url所代表数据的MIME类型。
//如果操作的数据属于集合类型,那么MIME类型字符串应该以vnd.android.cursor.dir/开头,
//例如:要得到所有person记录的Uri为content://cn.itcast.provider.personprovider/person,
//那么返回的MIME类型字符串应该为:“vnd.android.cursor.dir/person”。
//如果要操作的数据属于非集合类型数据,那么MIME类型字符串应该以vnd.android.cursor.item/开头,
//例如:得到id为10的person记录,Uri为content://cn.itcast.provider.personprovider/person/10,
//那么返回的MIME类型字符串应该为:“vnd.android.cursor.item/person”。


public String getType(Uri uri) {//返回当前操作的数据的mimeType
switch (MATCHER.match(uri)) {
case PERSONS:
return "vnd.android.cursor.dir/person";

case PERSON:
return "vnd.android.cursor.item/person";

default:
throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());
}
}


@Override
public Uri insert(Uri uri, ContentValues values) {// /person
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
switch (MATCHER.match(uri)) {
case PERSONS:
long rowid = db.insert("person", "name", values); 
//得到代表新增记录的Uri,
//其格式如 content//cn.itcast.providers.personprovider/person/10  后面的10为rowid,如果是int
//类型 则为表刚插入的主键值
Uri insertUri = ContentUris.withAppendedId(uri, rowid);
this.getContext().getContentResolver().notifyChange(uri, null);
return insertUri;


default:
throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());
}
}


@Override
public boolean onCreate() {
this.dbOpenHelper = new DBOpenHelper(this.getContext());
return false;
}
//查询person表中的所有记录   /person
//查询person表中指定id的记录 /person/10
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
switch (MATCHER.match(uri)) {
case PERSONS:
return db.query("person", projection, selection, selectionArgs, null, null, sortOrder);

case PERSON:
long id = ContentUris.parseId(uri);
String where = "personid="+ id;
if(selection!=null && !"".equals(selection)){
where = selection + " and " + where;
}
return db.query("person", projection, where, selectionArgs, null, null, sortOrder);

default:
throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());
}
}

//更新person表中的所有记录   /person
//更新person表中指定id的记录 /person/10
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
int count = 0;
switch (MATCHER.match(uri)) {
case PERSONS:
count = db.update("person", values, selection, selectionArgs);
return count;

case PERSON:
long id = ContentUris.parseId(uri);
String where = "personid="+ id;
if(selection!=null && !"".equals(selection)){
where = selection + " and " + where;
}
count = db.update("person", values, where, selectionArgs);
return count;

default:
throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());
}
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值