contentProvider简单实现数据库的增删改查

若要实现contentProvider程序,则需要实现以下接口和类




实现的代码如下1、DatabaseMetaData

package com.jackie.membercontentprovider;

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

public interface DatabaseMetaData {
	//这是外部访问的Authority,content地址为:content://com.jackie.membercontentprovider
     public static final String AUTHORITY="com.jackie.membercontentprovider";
     //数据库的名称
     public static final String DATABASE_NAME="jackie";
     //数据库的版本
     public static final int VERSION=1;
     //建立表元数据接口
     public static interface MemberTableMetaData extends BaseColumns{
    	 //建立表名称
    	 public static final String TABLE_NAME="member";
    	 //外部访问表的链接
    	 public static final Uri CONTENT_URI=Uri.parse("content://"+AUTHORITY+"/"+TABLE_NAME);
    	 //查询得到表全部内容
    	 public static final String CONTACT_LIST="vnd.android.cursor.dir/vnd.jackiecontentprovider.member";
    	 //取得表中部分信息,相当于按ID查询
    	 public static final String CONTACT_ITEM="vnd.android.cursor.item/vnd.jackiecontentprovider.member";
    	 
    	 public static final String MEMBER_NAME="name";
    	 public static final String MEMBER_AGE="age";
    	 public static final String MEMBER_BIRTHDAY="brithday";
    	 
    	 public static final String SORT_ORDER="_id DESC"; //排序操作
    	 
     }
     
}

2、数据库操作类 MyDatabaseHelper

package com.jackie.membercontentprovider;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDatabaseHelper extends SQLiteOpenHelper {

	public MyDatabaseHelper(Context context) {
		super(context, DatabaseMetaData.DATABASE_NAME, null,
				DatabaseMetaData.VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {

		String sql = "CREATE TABLE "

		+ DatabaseMetaData.MemberTableMetaData.TABLE_NAME + " ( "

		+ DatabaseMetaData.MemberTableMetaData._ID

		+ " INTEGER PRIMARY KEY,"

		+ DatabaseMetaData.MemberTableMetaData.MEMBER_NAME

		+ " VARCHAR(50) NOT NULL,"

		+ DatabaseMetaData.MemberTableMetaData.MEMBER_AGE

		+ " INTEGER NOT NULL,"
		+ DatabaseMetaData.MemberTableMetaData.MEMBER_BIRTHDAY

		+ " VARCHAR(50) NOT NULL" + " )";
		db.execSQL(sql);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		String sql = "DROP TABLE IF EXISTS"
				+ DatabaseMetaData.MemberTableMetaData.TABLE_NAME;
		db.execSQL(sql);
		this.onCreate(db);
	}

}

3、contentProvider 表的具体实现类,服务器端

package com.jackie.membercontentprovider;

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;

public class MemberContentProvider extends ContentProvider {
	private static UriMatcher uriMatcher = null; // 地址转换
	private static final int GET_MEMBER_LIST = 1; // 得到全部的数据
	private static final int GET_MEMBER_ITEM = 2; // 取得一个数据
	private MyDatabaseHelper helper = null;
	static { // 静态代码块
		uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); // 实例化对象
		uriMatcher.addURI(DatabaseMetaData.AUTHORITY,
				DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
				GET_MEMBER_LIST); // 取得全部数据的匹配地址
		uriMatcher.addURI(DatabaseMetaData.AUTHORITY,
				DatabaseMetaData.MemberTableMetaData.TABLE_NAME + "/#",
				GET_MEMBER_ITEM); // 取得一个数据的匹配地址

	}

	@Override
	public String getType(Uri uri) { // 取得数据类型
		switch (uriMatcher.match(uri)) { // 匹配传入进来的Uri类型
		case GET_MEMBER_LIST:
			return DatabaseMetaData.MemberTableMetaData.CONTACT_LIST;
		case GET_MEMBER_ITEM:
			return DatabaseMetaData.MemberTableMetaData.CONTACT_ITEM;
		default:
			throw new UnsupportedOperationException("Not Support Operation:"
					+ uri);
		}
	}

	@Override
	public boolean onCreate() { // 取得hepler类的对象
		this.helper = new MyDatabaseHelper(super.getContext());
		return true; // 表示操作成功了
	}

	@Override
	public int delete(Uri uri, String selection, String[] selectionArgs) {
		SQLiteDatabase db = this.helper.getWritableDatabase(); // 以写方式打开数据库
		int result = 0; // 操作结果
		switch (uriMatcher.match(uri)) {
		case GET_MEMBER_LIST:
			result = db.delete(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
					selection, selectionArgs);
			break;
		case GET_MEMBER_ITEM:
			long id = ContentUris.parseId(uri); // 找到里面的id
			String where = "_id=" + id;
			result = db.delete(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
					where, selectionArgs);
			break;
		default:
			throw new UnsupportedOperationException("Not Support Operation:"
					+ uri);
		}
		return result;
	}

	@Override
	public Uri insert(Uri uri, ContentValues values) { // 传过来的地址
							// ***content://com.jackie.membercontentprovider/member
		SQLiteDatabase db = this.helper.getWritableDatabase(); // 以写方式打开数据库
		long id = 0; // 取得增加数据后的id
		switch (uriMatcher.match(uri)) {
		case GET_MEMBER_LIST:
			id = db.insert(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
					DatabaseMetaData.MemberTableMetaData._ID, values);
			String uriPath = uri.toString();
			String path = uriPath + "/" + id;
			return Uri.parse(path);

		case GET_MEMBER_ITEM:
			return null;
		default:
			throw new UnsupportedOperationException("Not Support Operation:"
					+ uri);
		}
	}

	@Override
	public Cursor query(Uri uri, String[] columns, String selection,
			String[] selectionArgs, String sortOrder) {
		SQLiteDatabase db = this.helper.getWritableDatabase(); // 以写方式打开数据库
		switch (uriMatcher.match(uri)) {
		case GET_MEMBER_LIST:
			return db.query(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
					columns, selection, selectionArgs, null, null, sortOrder);
		case GET_MEMBER_ITEM:
			long id=ContentUris.parseId(uri);  //查询的id
 			String where="_id"+id;
 			return db.query(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
					columns, where, selectionArgs, null, null, sortOrder);
		default:
			throw new UnsupportedOperationException("Not Support Operation:"
					+ uri);
		}

	}

	@Override
	public int update(Uri uri, ContentValues values, String selection,
			String[] selectionArgs) {
		SQLiteDatabase db = this.helper.getWritableDatabase(); // 以写方式打开数据库
		int result = 0; // 表示结果
		switch (uriMatcher.match(uri)) {
		case GET_MEMBER_LIST:
			result = db.update(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
					values, null, null);
			break;
		case GET_MEMBER_ITEM:
			long id = ContentUris.parseId(uri); // 找到里面的id
			String where = "_id=" + id;
			result = db.update(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
					values, where, selectionArgs);
			break;
		default:
			throw new UnsupportedOperationException("Not Support Operation:"
					+ uri);
		}
		return result;
	}

}

4、请求数据端的程序MyDemo.java 

package com.jackie.membercontentprovider;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class MyDemo extends Activity {
	private Button insertBut = null;
	private Button updateBut = null;
	private Button deleteBut = null;
	private Button queryBut = null;
	private TextView mainInfo = null;
	private ListView memberList = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		this.insertBut = (Button) super.findViewById(R.id.insertBut);
		this.updateBut = (Button) super.findViewById(R.id.updateBut);
		this.deleteBut = (Button) super.findViewById(R.id.deleteBut);
		this.queryBut = (Button) super.findViewById(R.id.queryBut);
		this.mainInfo = (TextView) super.findViewById(R.id.mainInfo);
		this.memberList = (ListView) super.findViewById(R.id.memberList);
		this.insertBut.setOnClickListener(new insertOnClickListener());
		this.updateBut.setOnClickListener(new updateOnClickListener());
		this.deleteBut.setOnClickListener(new deleteOnClickListener());
		this.queryBut.setOnClickListener(new queryOnClickListener());
	}

	public class insertOnClickListener implements OnClickListener {

		@Override
		public void onClick(View arg0) {
			MyDemo.this.mainInfo.setText("现在执行的是增加操作***");
			long id = 0;
			id = MyDemo.this.testInsert("孙悟空", 100, new SimpleDateFormat(
					"yyyy-mm-dd").format(new Date())); // 增加数据
			Toast.makeText(MyDemo.this, "数据增加成功,ID为:" + id, Toast.LENGTH_LONG)
					.show();
		}

	}

	public class updateOnClickListener implements OnClickListener {

		@Override
		public void onClick(View arg0) {
			MyDemo.this.mainInfo.setText("现在执行的是更新操作***");
			long result = 0;
			result = MyDemo.this.testUpdate("2", "sam", 34, "1987s-1-13"); // 更新数据
			Toast.makeText(MyDemo.this, "更新了" + result + "条记录",
					Toast.LENGTH_LONG).show();
		}

	}

	public class deleteOnClickListener implements OnClickListener {

		@Override
		public void onClick(View arg0) {
			MyDemo.this.mainInfo.setText("现在执行的是删除操作***");
			long result = 0;
			result = MyDemo.this.testDelete(String.valueOf(4)); // 更新数据
			Toast.makeText(MyDemo.this, "删除了" + result + "条记录",
					Toast.LENGTH_LONG).show();
		}

	}

	public class queryOnClickListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			MyDemo.this.mainInfo.setText("现在执行的是查询操作***");
			Cursor result = MyDemo.this.testQuery(null); // 查询全部
			MyDemo.this.startManagingCursor(result);     //把返回的结果交给系统管理
			List<Map<String, Object>> members = new ArrayList<Map<String, Object>>();
			for (result.moveToFirst(); !result.isAfterLast(); result
					.moveToNext()) {
				Map<String, Object> member = new HashMap<String, Object>();
				member.put("_id", result.getInt(0));
				member.put("name", result.getString(1));
				member.put("age", result.getInt(2));
				member.put("birthday", result.getString(3));
				members.add(member);
			}
			MyDemo.this.memberList.setAdapter(new SimpleAdapter(MyDemo.this,
					members, R.layout.member, new String[] { "_id", "name",
							"age", "birthday" }, new int[] { R.id._id,
							R.id.name, R.id.age, R.id.birthday }));
			Toast.makeText(MyDemo.this, "数据查询成功!!!",
					Toast.LENGTH_LONG).show();
		}

	}

	public long testInsert(String name, int age, String birthday) { // 执行增加数据操作
		ContentResolver contentresolver = super.getContentResolver();
		ContentValues values = new ContentValues();
		values.put(DatabaseMetaData.MemberTableMetaData.MEMBER_NAME, name);
		values.put(DatabaseMetaData.MemberTableMetaData.MEMBER_AGE, age);
		values.put(DatabaseMetaData.MemberTableMetaData.MEMBER_BIRTHDAY,
				birthday);
		Uri resultUri = contentresolver.insert(
				DatabaseMetaData.MemberTableMetaData.CONTENT_URI, values);
		System.out.println("***" + resultUri);
		return ContentUris.parseId(resultUri); // 解析出返回的id数据
	}

	public long testUpdate(String _id, String name, int age, String birthday) { // 执行增加数据操作
		long result = 0; // 返回结果
		ContentResolver contentresolver = super.getContentResolver();
		ContentValues values = new ContentValues();
		values.put(DatabaseMetaData.MemberTableMetaData.MEMBER_NAME, name);
		values.put(DatabaseMetaData.MemberTableMetaData.MEMBER_AGE, age);
		values.put(DatabaseMetaData.MemberTableMetaData.MEMBER_BIRTHDAY,
				birthday);

		if (_id == null || "".equals(_id)) { // 更新全部
			result = contentresolver.update(
					DatabaseMetaData.MemberTableMetaData.CONTENT_URI, values,
					null, null);
		} else {
			result = contentresolver.update(Uri.withAppendedPath(
					DatabaseMetaData.MemberTableMetaData.CONTENT_URI, _id),
					values, null, null);
		}
		return result; // 解析出返回的id数据
	}

	public long testDelete(String _id) { // 执行增加数据操作
		ContentResolver contentresolver = super.getContentResolver();
		long result = 0; // 返回结果
		if (_id == null || "".equals(_id)) { // 更新全部
			result = contentresolver.delete(
					DatabaseMetaData.MemberTableMetaData.CONTENT_URI, null,
					null);
		} else {
			result = contentresolver.delete(Uri.withAppendedPath(
					DatabaseMetaData.MemberTableMetaData.CONTENT_URI, _id),
					null, null);
		}
		return result; // 解析出返回的id数据
	}

	public Cursor testQuery(String _id) {
		ContentResolver contentresolver = super.getContentResolver();
		if (_id == null || "".equals(_id)) {
			return contentresolver
					.query(DatabaseMetaData.MemberTableMetaData.CONTENT_URI,
							null, null, null,
							DatabaseMetaData.MemberTableMetaData.SORT_ORDER);
		} else {
			return contentresolver.query(Uri.withAppendedPath(
					DatabaseMetaData.MemberTableMetaData.CONTENT_URI, _id),
					null, null, null,
					DatabaseMetaData.MemberTableMetaData.SORT_ORDER);
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.my_demo, menu);
		return true;
	}

}

5、查询到表的数据显示在终端,两布局文件main.xml和member.xml

Main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MyDemo" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        tools:context=".MyDemo" >

        <Button
            android:id="@+id/insertBut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="增加" />

        <Button
            android:id="@+id/updateBut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="更新" />

        <Button
            android:id="@+id/deleteBut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="删除" />

        <Button
            android:id="@+id/queryBut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="查询" />
    </LinearLayout>

    <TextView
        android:id="@+id/mainInfo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ListView
        android:id="@+id/memberList"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

member.xml
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MyDemo" >
    <TableRow>
        <TextView 
            android:id="@+id/_id"
            android:layout_width="30px"
            android:layout_height="wrap_content"/>
        <TextView 
            android:id="@+id/name"
            android:layout_width="100px"
            android:layout_height="wrap_content"/>
        <TextView 
            android:id="@+id/age"
            android:layout_width="60px"
            android:layout_height="wrap_content"/>
        <TextView 
            android:id="@+id/birthday"
            android:layout_width="200px"
            android:layout_height="wrap_content"/>
    </TableRow>
</TableLayout>





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值