android content provider

ContentProvider 是android 里面重要组件之一 ,关于自定义ContentProvider 代码 以提供一个学生类的数据表为例

package com.content.provider;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {
	
//	private static final String 
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    public void query(View view){
    	Cursor cursor=getContentResolver().query(Student.CONTENT_URI, null, null, null,null);
    	String data="";
    	if(cursor.moveToFirst()){
    		data+="id"+cursor.getInt(0)+"name"+cursor.getString(1);
    	}
    	while(cursor.moveToNext()){
    		data+="id"+cursor.getInt(0)+"name"+cursor.getString(1);
    	}
    	cursor.close();
    	setTitle("查询成功!");
    	((TextView)findViewById(R.id.textView1)).setText(data);
    }
    
    public void insert(View view){
    	ContentValues values=new ContentValues();
    	values.put("NAME", "123444");
		getContentResolver().insert(Student.CONTENT_URI, values);
    	setTitle("插入成功!");
    }
    
    public void update(View view){
    	ContentValues values=new ContentValues();
    	values.put("name", "456");
    	String where="id=?";
		String[] selectionArgs=new String []{"1"};
		getContentResolver().update(Student.CONTENT_URI, values, where, selectionArgs);
		setTitle("更新成功!");
    }
    
    public void delete(View view){
    	String where="id=?";
		String[] selectionArgs=new String []{"1"};
		getContentResolver().delete(Student.CONTENT_URI, where, selectionArgs);
		setTitle("删除成功!");
    }
}

 

package com.content.provider;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.net.Uri;

public class StudentContentProvider extends ContentProvider {

	private SQLiteDatabase mDatabase;

	private StudentDataBaseHelper mHelper;

	private static final String DB_NAME = "student.db";

	private static Context mContext;

	private static int DB_VERSION = 1;

	private static final UriMatcher M_URI_MATCHER;

	private SQLiteQueryBuilder mLiteQueryBuilder = new SQLiteQueryBuilder();

	static {
		M_URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
		M_URI_MATCHER.addURI(Student.AUTHORITY, Student.TB_NAME,
				Student.STUDENT);
		M_URI_MATCHER.addURI(Student.AUTHORITY, Student.TB_NAME + "/#",
				Student.STUDENT_ITEM);
	}

	@Override
	public int delete(Uri uri, String arg1, String[] arg2) {
		mDatabase=mHelper.getWritableDatabase();
		int row=mDatabase.delete(Student.TB_NAME, arg1, arg2);
		mContext.getContentResolver().notifyChange(uri, null);
		return  row;
	}

	@Override
	public String getType(Uri uri) {
		int math = M_URI_MATCHER.match(uri);
		switch (math) {
		case Student.STUDENT:
			return Student.STUDENT_TYPE;
		case Student.STUDENT_ITEM:
			return Student.STUDENT_ITEM_TYPE;
		}
		return null;
	}

	@Override
	public Uri insert(Uri uri, ContentValues values) {
		mDatabase = mHelper.getWritableDatabase();
		String tableName = uri.getPathSegments().get(0);
		if (tableName == null)
			throw new IllegalArgumentException();
		if (null != values) {
			long rowId = mDatabase.insert(Student.TB_NAME, null, values);
			if (0 < rowId) {
				Uri newUri = ContentUris.withAppendedId(uri, rowId);
				mContext.getContentResolver().notifyChange(uri, null);
				return newUri;
			}
		}
		return null;
	}

	@Override
	public boolean onCreate() {
		mHelper = new StudentDataBaseHelper(getContext());
		mHelper.close();
		return true;
	}

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {
		mDatabase = mHelper.getReadableDatabase();
		String tableName = uri.getPathSegments().get(0);
		if (tableName == null)
			throw new IllegalArgumentException();
		Cursor c = mDatabase.query(Student.TB_NAME, new String[] {}, selection,
				selectionArgs, null, null, sortOrder);
		c.setNotificationUri(mContext.getContentResolver(), uri);
		return c;

	}

	@Override
	public int update(Uri uri, ContentValues values, String selection,
			String[] selectionArgs) {
		mDatabase = mHelper.getWritableDatabase();
		String tableName = uri.getPathSegments().get(0);
		if (tableName == null)
			throw new IllegalArgumentException();
		mLiteQueryBuilder.setTables(Student.TB_NAME);
		mLiteQueryBuilder.appendWhere("_id=" + uri.getLastPathSegment());
		int row=mDatabase.update(Student.TB_NAME, values, selection,
				selectionArgs);
		mContext.getContentResolver().notifyChange(uri, null);
		return row;
	}

	private static class StudentDataBaseHelper extends SQLiteOpenHelper {

		public StudentDataBaseHelper(Context context) {
			super(context, DB_NAME, null, DB_VERSION);
			mContext = context;
		}

		public StudentDataBaseHelper(Context context, String name,
				CursorFactory factory, int version) {
			super(context, name, factory, version);
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			db.execSQL("CREATE TABLE STUDENT (" + "ID"
					+ " INTEGER PRIMARY KEY AUTOINCREMENT," + "NAME "
					+ "TEXT);");
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			db.execSQL("DROP TABLE IF EXISTS STUDENT");
			onCreate(db);
		}

	}

	@Override
	protected void finalize() throws Throwable {
		if(null!=mDatabase) mDatabase.close();
		super.finalize();
	}
	
	

}

  

package com.content.provider;

import android.net.Uri;
import android.provider.BaseColumns;

public class Student implements BaseColumns{

	public static final String TB_NAME="Student";//表名
	
	public static final String AUTHORITY="com.content.provider.studentcontentprovider";//数据提供者的路径
	
	public static final Uri CONTENT_URI=Uri.parse("content://"+AUTHORITY+"/"+TB_NAME);//访问学生类的URI
	
	public static final String STUDENT_TYPE="vnd.android.cursor.dir/vnd.aspire.student";// 学生表的数据类型
	
	public static final String STUDENT_ITEM_TYPE="vnd.android.cursor.item/vnd.aspire.student";//学生表里的一条数据的类型
	
	public static final int STUDENT=1;//所有数据 类型常量
	
	public static final int STUDENT_ITEM=2;//一条数据的类型常量
	
}

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.content.provider"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="4" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
		<provider android:name=".StudentContentProvider" android:authorities="com.content.provider.studentcontentprovider"></provider>
    </application>
</manifest>

 

你可能感兴趣的:(C++,c,android,sqlite,C#)