内容提供者

来源:互联网 发布:windows位图结构 编辑:程序博客网 时间:2024/04/25 17:32
package com.xh.tx.utils;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;public class MySQLLiteHelper extends SQLiteOpenHelper{/** * 函数的作用:构造方法用来创建工具类 * param1: context 上下文环境 * param2: name 数据库的名称 * param3: factory 游标对象Cursor  * parma4: varsion 数据库的版本 数据库的版本不能从0开始 * @param context */public MySQLLiteHelper(Context context, String name, CursorFactory factory,int version) {super(context, "test.db", null, 1);}/** * 用来创建数据库 */@Overridepublic void onCreate(SQLiteDatabase db) {String sql = "create table person (id integer primary key, name varchar(20), age integer);";db.execSQL(sql);// 真正执行数据的创建}//数据库版本更新//版本需要发生变化,否则不会执行@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {/*Log.d("============", oldVersion + "  : " + newVersion);if(oldVersion == 1){String sql = "alter table person add balance integer;";db.execSQL(sql);}*/}//每次打开数据库的时候调用@Overridepublic void onOpen(SQLiteDatabase db) {super.onOpen(db);}}


package com.xh.tx.contentprivoder;import com.xh.tx.utils.MySQLLiteHelper;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;/** * 要完成一个内容提供者你需要遵循以下步骤 * 1. extends ConcentePrivoder *  2. 提供一个数据库的连接工具类MySQLLiteHelper *  3. 定义我们的主号码和分机号 *  * @author soft * */public class PersonContentPrivoder extends ContentProvider{private MySQLLiteHelper helper = null;//uriMatcher 工厂private static UriMatcher uriMatcher = null;private static final String AURHORITH = "com.xh.tx.contentprivoder.PersonContentPrivoder"; // 这个就是主号码private static final int PERSON_INSERT_CODE = 0;private static final int PERSON_UPDATE_CODE = 1;private static final int PERSON_DELETE_CODE = 2;private static final int PERSON_QUERY_CODE = 3;static{uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);//参数就是分机号//添加插入的分机号//访问地址:content://com.xh.tx.contentprivoder.PersonContentPrivoder/person/inserturiMatcher.addURI(AURHORITH, "person/insert", PERSON_INSERT_CODE);//更新插入的分机号//访问地址:content://com.xh.tx.contentprivoder.PersonContentPrivoder/person/updateuriMatcher.addURI(AURHORITH, "person/update", PERSON_UPDATE_CODE);//删除的分机号//访问地址:content://com.xh.tx.contentprivoder.PersonContentPrivoder/person/deleteuriMatcher.addURI(AURHORITH, "person/delete", PERSON_DELETE_CODE);//查询的分机号//访问地址:content://com.xh.tx.contentprivoder.PersonContentPrivoder/person/queryuriMatcher.addURI(AURHORITH, "person/query", PERSON_QUERY_CODE);}//在内容提供者创建的时候初始化我们的数据库工具类@Overridepublic boolean onCreate() {helper = new MySQLLiteHelper(getContext(), null, null, -1);return false;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {switch (uriMatcher.match(uri)) {case PERSON_QUERY_CODE:SQLiteDatabase db = helper.getWritableDatabase();if(db.isOpen()){Cursor cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);//db.close(); // 不能关掉数据库否者访问不到数据return cursor;}break;default:throw new IllegalArgumentException("参数错误 :" + uri); //匹配不上的时候抛出异常提醒uri传递错误}return null;}//由系统调用,所以我们一般不会重写他@Overridepublic String getType(Uri uri) {return null;}//inert方法提供真实的服务@Overridepublic Uri insert(Uri uri, ContentValues values) {//访问地址:content://com.xh.tx.contentprivoder.PersonContentPrivoder/person/query/5//返回一个uri类型的数据 一般我们就将就访问地址,然后在地址后面追加添加成功以后返回的idswitch (uriMatcher.match(uri)) {case PERSON_INSERT_CODE:SQLiteDatabase db = helper.getWritableDatabase();if(db.isOpen()){long id = db.insert("person", null, values);db.close();return ContentUris.withAppendedId(uri, id);}break;default:throw new IllegalArgumentException("参数错误 :" + uri); //匹配不上的时候抛出异常提醒uri传递错误}return null;}@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {switch (uriMatcher.match(uri)) {case PERSON_DELETE_CODE:SQLiteDatabase db = helper.getWritableDatabase();if(db.isOpen()){int id = db.delete("person", selection, selectionArgs);db.close();return id;}break;default:throw new IllegalArgumentException("参数错误 :" + uri); //匹配不上的时候抛出异常提醒uri传递错误}return 0;}@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {switch (uriMatcher.match(uri)) {case PERSON_UPDATE_CODE:SQLiteDatabase db = helper.getWritableDatabase();if(db.isOpen()){int id = db.update("person", values, selection, selectionArgs);db.close();return id;}break;default:throw new IllegalArgumentException("参数错误 :" + uri); //匹配不上的时候抛出异常提醒uri传递错误}return 0;}}



0 0
原创粉丝点击