前言:现在这段时间没这么忙了,要抓紧时间把要总结的知识沉淀下来,今年重新分了项目组,在新项目中应该不会那么忙了,看来有时间来学一些自己的东西了。现在而言,我需要的是时间。只要不断的努力,总有一天,你会与从不同。加油。
相关文章:
1、《ContentProvider数据库共享之——概述》
2、《ContentProvider数据库共享之——实例讲解》
3、《ContentProvider数据库共享之——MIME类型与getType()》
4、《ContentProvider数据库共享之——读写权限与数据监听》
在上篇文章中,已经给大家初步讲解了有关ContentProvder的整体流程及设计方式,在这篇文章中将通过实例来讲述ContentProvider的操作过程;
一、ContentProvider提供数据库查询接口
在上篇中,我们提到过,两个应用间是通过Content URI来媒介传递消息的,我们的应用在收到URI以后,通过匹配完成对应的数据库操作功能。听的有点迷糊?没关系,下面会细讲,我这里要说的是,匹配成功后要完成的数据库操作!!!那好,我们的第一步:建数据库,数据表
1、利用SQLiteOpenHelper创建数据库、数据表
在这里,我们在一个数据库(“harvic.db”)中创建两个数据表”first”与”second”;每个表都有多出一个字段“table_name”,来保存当前数据表的名称
代码如下:
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "harvic.db";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_FIRST_NAME = "first";
public static final String TABLE_SECOND_NAME = "second";
public static final String SQL_CREATE_TABLE_FIRST = "CREATE TABLE " +TABLE_FIRST_NAME +"("
+ BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ "table_name" +" VARCHAR(50) default 'first',"
+ "name" + " VARCHAR(50),"
+ "detail" + " TEXT"
+ ");" ;
public static final String SQL_CREATE_TABLE_SECOND = "CREATE TABLE "+TABLE_SECOND_NAME+" ("
+ BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ "table_name" +" VARCHAR(50) default 'second',"
+ "name" + " VARCHAR(50),"
+ "detail" + " TEXT"
+ ");" ;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.e("harvic", "create table: " + SQL_CREATE_TABLE_FIRST);
db.execSQL(SQL_CREATE_TABLE_FIRST);
db.execSQL(SQL_CREATE_TABLE_SECOND);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS first");
db.execSQL("DROP TABLE IF EXISTS second");
onCreate(db);
}
}
2、利用ContentProvider提供数据库操作接口
新建一个类PeopleContentProvider,派生自ContentProvider基类,写好之后,就会自动生成query(),insert(),update(),delete()和getType()方法;这些方法就是根据传过来的URI来操作数据库的接口。此时的PeopleContentProvider是这样的:
public class PeopleContentProvider extends ContentProvider {
@Override
public boolean onCreate() {
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
return null;
}
@Override
public String getType(Uri uri) {
return nu