package com.android.utils;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
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);
}
/**
* 用来创建数据库
*/
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table person (id integer primary key, name varchar(20), age integer);";
db.execSQL(sql);// 真正执行数据的创建
}
//数据库版本更新
//版本需要发生变化,否则不会执行
@Override
public 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);
}*/
}
//每次打开数据库的时候调用
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
}
}
package com.android.bean;
public class Person
{
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
package com.android.contentprivoder;
import com.android.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.android.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.android.contentprivoder.PersonContentPrivoder/person/insert
uriMatcher.addURI(AURHORITH, "person/insert", PERSON_INSERT_CODE);
//更新插入的分机号
//访问地址:content://com.android.contentprivoder.PersonContentPrivoder/person/update
uriMatcher.addURI(AURHORITH, "person/update", PERSON_UPDATE_CODE);
//删除的分机号
//访问地址:content://com.android.contentprivoder.PersonContentPrivoder/person/delete
uriMatcher.addURI(AURHORITH, "person/delete", PERSON_DELETE_CODE);
//查询的分机号
//访问地址:content://com.android.contentprivoder.PersonContentPrivoder/person/query
uriMatcher.addURI(AURHORITH, "person/query", PERSON_QUERY_CODE);
}
//在内容提供者创建的时候初始化我们的数据库工具类
@Override
public boolean onCreate() {
helper = new MySQLLiteHelper(getContext(), null, null, -1);
return false;
}
@Override
public 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;
}
//由系统调用,所以我们一般不会重写他
@Override
public String getType(Uri uri) {
return null;
}
//inert方法提供真实的服务
@Override
public Uri insert(Uri uri, ContentValues values) {
//访问地址:content://com.android.contentprivoder.PersonContentPrivoder/person/query
//返回一个uri类型的数据 一般我们就将就访问地址,然后在地址后面追加添加成功以后返回的id
switch (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;
}
@Override
public 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;
}
@Override
public 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;
}
}
还需要在 AndroidManifest.xml 文件中注册
<!-- 定义读写权限权限 (可以不用)-->
<permission
android:name="aaa.bbb.ccc"
></permission>
<permission
android:name="aaa.bbb.ccc.ddd"
></permission>
<!-- 写contentpriverder 必须要在主xml文件中申明 -->
<provider
android:name="com.android.contentprivoder.PersonContentPrivoder"
android:authorities="com.xh.tx.contentprivoder.PersonContentPrivoder"
android:readPermission="aaa.bbb.ccc"
android:writePermission="aaa.bbb.ccc.ddd"
></provider>