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
- contentProvider简单实现数据库的增删改查
- ContentProvider实现增删查改
- Android中内容提供者ContentProvider实现数据库增删改查
- Android中内容提供者ContentProvider实现数据库增删改查
- 数据库SQLite的增删改查简单的实现
- 使用Hibernate实现简单的数据库增删改查。
- android简单的实现数据库增删改查
- 简单的数据库 查询 增删改查 -----
- 数据库的简单操作----增删改查
- oracle数据库的简单增删改查
- 简单的数据库增删改查语句
- ContentProvider-SqliteDatabase实现增删查改(1)
- mongodb实现简单的增删改查
- Hibernate实现简单的增删改查
- mongodb实现简单的增删改查
- mongodb实现简单的增删改查
- Mybatis实现简单的增删改查
- VS2013实现数据库的增删改查
- (七)scheduler 定时器
- 工厂模式
- 程序员常去的14个顶级开发社区
- Flappy bird 小游戏的实现
- Shuttle ESB(二)——架构模型介绍(1)
- contentProvider简单实现数据库的增删改查
- vs2010怎么添加自定义控件呢
- 数组名a 作为 左值和 右值的区别
- solr项目流程
- 将你的N9开启“开发者模式”,连接到QT SDK
- 正则表达式之元字符与转义
- 利用notepad++中安装python脚本实现批量转换文件编码
- openwrt增加自己的开发板
- html5学习---------2