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

来源:互联网 发布:联通网络被禁止了 编辑:程序博客网 时间:2024/06/10 21:32

若要实现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);}@Overridepublic 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);}@Overridepublic 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); // 取得一个数据的匹配地址}@Overridepublic 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);}}@Overridepublic boolean onCreate() { // 取得hepler类的对象this.helper = new MyDatabaseHelper(super.getContext());return true; // 表示操作成功了}@Overridepublic 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); // 找到里面的idString where = "_id=" + id;result = db.delete(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,where, selectionArgs);break;default:throw new UnsupportedOperationException("Not Support Operation:"+ uri);}return result;}@Overridepublic Uri insert(Uri uri, ContentValues values) { // 传过来的地址// ***content://com.jackie.membercontentprovider/memberSQLiteDatabase db = this.helper.getWritableDatabase(); // 以写方式打开数据库long id = 0; // 取得增加数据后的idswitch (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);}}@Overridepublic 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);}}@Overridepublic 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); // 找到里面的idString 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;@Overrideprotected 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 {@Overridepublic 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 {@Overridepublic 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 {@Overridepublic 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 {@Overridepublic 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);}}@Overridepublic 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 0