一、Content Provider基本概念
1、ContentProvider为存储和获取数据提供了统一的接口。ContentProvide对数据进行封装,不用关心数据存储的细节。使用表的形式来组织数据。
2、使用ContentProvider可以在不同的应用程序之间共享数据。query(),insert(),update(),delete(),getType(),onCreate()等。
D:如果URI中包含表示需要获取的记录的ID;则就返回该id对应的数据,如果没有ID,就表示返回全部; "content://hx.android.text.myprovider/tablename/#" #表示数据id
Content Provider增删改查实例(通过listview显示操作过的数据)
1,创建person库,person表
package com.example.contentproviderdemo2;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBOpenHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "person.db"; //数据库名称
private static final int DATABASE_VERSION = 1;//数据库版本
public DBOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE person (_id integer primary key autoincrement, name varchar(20), age varchar(10))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS person");
onCreate(db);
}
}
package com.example.contentproviderdemo2;
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;
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.com.karl.personProvider", "person", PERSONS);
MATCHER.addURI("cn.com.karl.personProvider", "person/#", PERSON);
}
@Override
public boolean onCreate() {
// TODO Auto-generated method stub
this.dbOpenHelper = new DBOpenHelper(this.getContext());
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
switch (MATCHER.match(uri)) {
case PERSONS://查询所有的
return db.query("person", projection, selection, selectionArgs,
null, null, sortOrder);
case PERSON://查询某一id的人的信息
long id = ContentUris.parseId(uri);
String where = "_id=" + 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());
}
}
//返回数据的MIME类型。
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
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());
}
}
// 插入person表中的所有记录 /person
// 插入person表中指定id的记录 /person/10
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
switch (MATCHER.match(uri)) {
case PERSONS:
// 特别说一下第二个参数是当name字段为空时,将自动插入一个NULL。
long rowid = db.insert("person", "name", values);
Uri insertUri = ContentUris.withAppendedId(uri, rowid);// 得到代表新增记录的Uri
this.getContext().getContentResolver().notifyChange(uri, null);
return insertUri;
default:
throw new IllegalArgumentException("Unkwon Uri:" + uri.toString());
}
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
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 = "_id=" + 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
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
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 = "_id=" + 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());
}
}
}
package com.example.contentproviderdemo2;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class ResolverDemoActivity extends Activity {
/** Called when the activity is first created. */
private SimpleCursorAdapter adapter;
private ListView listView;
private Button button_insert;
private Button button_query;
private Button button_query_one;
private EditText edittext_query;
private Button button_update_one;
private EditText edittext_update;
private Button button_update;
private Button button_delete;
private Button button_delete_one;
private EditText edittext_delete;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView=(ListView) this.findViewById(R.id.listView);
ContentResolver contentResolver = getContentResolver();
Uri selectUri = Uri.parse("content://cn.com.karl.personProvider/person");
Cursor cursor=contentResolver.query(selectUri, null, null, null, null);
adapter = new SimpleCursorAdapter(this, R.layout.item, cursor,
new String[]{"_id", "name", "age"}, new int[]{R.id.id, R.id.name, R.id.age});
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
ListView lView = (ListView)parent;
Cursor data = (Cursor)lView.getItemAtPosition(position);
int _id = data.getInt(data.getColumnIndex("_id"));
Toast.makeText(ResolverDemoActivity.this, _id+"", 1).show();
}
});
button_insert = (Button) this.findViewById(R.id.insertbutton);
button_insert.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ContentResolver contentResolver = getContentResolver();
Uri insertUri = Uri.parse("content://cn.com.karl.personProvider/person");
ContentValues values = new ContentValues();
values.put("name", "wangkuifeng");
values.put("age", 23);
Uri uri = contentResolver.insert(insertUri, values);
Toast.makeText(ResolverDemoActivity.this, "添加完成", 1).show();
}
});
button_query = (Button)this.findViewById(R.id.querybutton);
button_query.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ContentResolver contentResolver = getContentResolver();
Uri selectUri = Uri.parse("content://cn.com.karl.personProvider/person");
Cursor cursor=contentResolver.query(selectUri, null, null, null, null);
SimpleCursorAdapter adapter= new SimpleCursorAdapter(ResolverDemoActivity.this, R.layout.item, cursor,
new String[]{"_id", "name", "age"}, new int[]{R.id.id, R.id.name, R.id.age});
listView.setAdapter(adapter);
Toast.makeText(ResolverDemoActivity.this, "查询完成", 1).show();
}
});
button_query_one = (Button)this.findViewById(R.id.queryonebutton);
edittext_query = (EditText)this.findViewById(R.id.queryone_et);
button_query_one.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String num = edittext_query.getText().toString();
ContentResolver contentResolver = getContentResolver();
Uri selectUri = Uri.parse("content://cn.com.karl.personProvider/person"+"/"+num);
Cursor cursor=contentResolver.query(selectUri, null, null, null, null);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(ResolverDemoActivity.this, R.layout.item, cursor,
new String[]{"_id", "name", "age"}, new int[]{R.id.id, R.id.name, R.id.age});
listView.setAdapter(adapter);
Toast.makeText(ResolverDemoActivity.this, "查询完成", 1).show();
}
});
edittext_update = (EditText)this.findViewById(R.id.update_et);
button_update_one = (Button)this.findViewById(R.id.updateonebutton);
button_update_one.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String num = edittext_update.getText().toString();
ContentResolver contentResolver = getContentResolver();
Uri updateUri = Uri.parse("content://cn.com.karl.personProvider/person"+"/"+num);
ContentValues values = new ContentValues();
values.put("name", "superjunjin");
values.put("age", 26);
int count = contentResolver.update(updateUri, values, null, null);
Toast.makeText(ResolverDemoActivity.this, "更新完成", 1).show();
}
});
button_update = (Button)this.findViewById(R.id.updatebutton);
button_update.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ContentResolver contentResolver = getContentResolver();
Uri updateUri = Uri.parse("content://cn.com.karl.personProvider/person");
ContentValues values = new ContentValues();
values.put("name", "superjunjin");
values.put("age", 26);
int count = contentResolver.update(updateUri, values, null, null);
Toast.makeText(ResolverDemoActivity.this, "更新完成", 1).show();
}
});
button_delete = (Button)this.findViewById(R.id.deletebutton);
button_delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ContentResolver contentResolver = getContentResolver();
Uri deleteUri = Uri.parse("content://cn.com.karl.personProvider/person");
contentResolver.delete(deleteUri, null, null);
Toast.makeText(ResolverDemoActivity.this, "删除完成", 1).show();
}
});
edittext_delete = (EditText)this.findViewById(R.id.delete_et);
button_delete_one = (Button)this.findViewById(R.id.deleteonebutton);
button_delete_one.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String num = edittext_delete.getText().toString();
ContentResolver contentResolver = getContentResolver();
Uri deleteUri = Uri.parse("content://cn.com.karl.personProvider/person"+"/"+num);
contentResolver.delete(deleteUri, null, null);
Toast.makeText(ResolverDemoActivity.this, "删除完成", 1).show();
}
});
}
}
http://blog.csdn.net/huangbiao86/article/details/6679823
实例下载 http://download.csdn.net/detail/superjunjin/7245993