1. 写一个类继承系统的ContentProvider
2. 在清单文件中注册
<provider
android:name="com.example.bank.BankProvider"
android:authorities="tian.wang.gai.di.hu" >
</provider>
3. 暗号 URI
static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
static{
//添加URI的匹配规则
matcher.addURI("tian.wang.gai.di.hu", "bao.ta.zhen.he.yao",URI_SUCC);
}
4. 实现数据的增删改查的操作
package com.example.bank;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
/**
* 1. 写一个类继承系统的ContentProvider
*
* 数据库管理员
* 双面间谍
*/
public class BankProvider extends ContentProvider {
private static final int URI_SUCC = 0;
private static final int URI_SUCC_QUERY = 1;
private static final int URI_SUCC_ACCOUNT = 2;
private static final int URI_SUCC_BALC = 3;
private BankDbOpenHelper helper;
private SQLiteDatabase db;
//3. 暗号 URI
static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
static{
//添加URI的匹配规则
matcher.addURI("tian.wang.gai.di.hu", "bao.ta.zhen.he.yao",URI_SUCC);
//添加URI的匹配规则 用方法名 query
matcher.addURI("tian.wang.gai.di.hu", "query",URI_SUCC_QUERY);
//添加URI的匹配规则 用方法名 account 表名 推荐使用
matcher.addURI("tian.wang.gai.di.hu", "account",URI_SUCC_ACCOUNT);
//添加URI的匹配规则 用方法名 black 表名 推荐使用
matcher.addURI("tian.wang.gai.di.hu", "black",URI_SUCC_BALC);
//添加URI的匹配规则 用方法名 account/2
matcher.addURI("tian.wang.gai.di.hu", "account/2",URI_SUCC_ACCOUNT);
/添加URI的匹配规则 用方法名 account/#
matcher.addURI("tian.wang.gai.di.hu", "account/#",URI_SUCC_ACCOUNT);
}
@Override
public boolean onCreate() {
helper = new BankDbOpenHelper(getContext());
db = helper.getWritableDatabase();
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {
int code = matcher.match(uri);
if (code == URI_SUCC_QUERY) {
Cursor cursor = db.query("account", projection, selection, selectionArgs, null, null, sortOrder);
//发出通知
getContext().getContentResolver().notifyChange(uri, null);
return cursor;
}else if(code == URI_SUCC_BALC){
Cursor cursor = db.query("black", projection, selection, selectionArgs, null, null, sortOrder);
return cursor;
}else {
throw new IllegalArgumentException("根据相关的法律规定,您无权操作银行数据库!") ;
}
}
/**
* vnd.android.cursor.item 单行数据
vnd.android.cursor.dir/ 多行数据库
*/
@Override
public String getType(Uri uri) {
return null;
}
/**
* 4. 实现增的方法
*
* content://tian.wang.gai.di.hu/bao.ta.zhen.he.yao
*
*/
@Override
public Uri insert(Uri uri, ContentValues values) {
int code = matcher.match(uri);
if (code == URI_SUCC) {
//行长操作的数据库
long id = db.insert("account", null, values);
//发出通知
getContext().getContentResolver().notifyChange(uri, null);
return Uri.parse("id:"+id);
}else if(code == URI_SUCC_BALC){
long id = db.insert("black", null, values);
return Uri.parse("id:"+id);
}else {
throw new IllegalArgumentException("根据相关的法律规定,您无权操作银行数据库!") ;
}
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int code = matcher.match(uri);
if (code == URI_SUCC_ACCOUNT) {
int id = db.delete("account", selection, selectionArgs);
//发出通知
getContext().getContentResolver().notifyChange(uri, null);
return id;
}else if(code == URI_SUCC_BALC){
int id = db.delete("black", selection, selectionArgs);
return id;
}else {
throw new IllegalArgumentException("根据相关的法律规定,您无权操作银行数据库!") ;
}
}
@Override
public int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {
int code = matcher.match(uri);
if (code == URI_SUCC_ACCOUNT) {
int id = db.update("account", values, selection, selectionArgs);
//发出通知
getContext().getContentResolver().notifyChange(uri, null);
return id;
}else if(code == URI_SUCC_BALC){
int id = db.update("black", values, selection, selectionArgs);
return id;
}else {
throw new IllegalArgumentException("根据相关的法律规定,您无权操作银行数据库!") ;
}
}
}
package com.example.bank;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class BankDbOpenHelper extends SQLiteOpenHelper {
/**
* 构造方法
*
* @param context
* 上下文
* @param name
* 数据库的名称
* @param factory
* 游标工厂 null
* @param version
* 数据库的版本号 >= 1
*/
public BankDbOpenHelper(Context context) {
super(context,"bank.db",null,2);
}
/**
* 第一次创建数据库的时候调用
* 适合做一些初始化的事情
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table account(_id integer primary key autoincrement,name varchar(20),money varchar(20))");
}
/**
* 升级数据库的时候调用
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("create table black(_id integer primary key autoincrement,name varchar(20),money varchar(20))");
}
}