元数据接口

package com.example.contentproviderprojecrt;
import android.net.Uri;
import android.provider.BaseColumns;
public interface MLDNbatabaseMetaData {
//外部访问,content地址://com.example.contentproviderproject
public  static final String AUTHORITY="com.example.contentproviderproject";
//数据库的名称
public static final String DATABASE_NAME="mldn.db";
//数据库的版本
public static final int VERSION=1;
//member表的元素定义,直接继承与_ID和_COUNT静态变量
public static interface MemberTableMetaData extends BaseColumns{
//数据表的名称
public static final String TABLE_NAME="member";
//外部访问的URI地址
public static final Uri CONTENT_URI=Uri.parse("content://"+
AUTHORITY+"/"+TABLE_NAME);
//取得member表中的所有数据
public static final String CONTACT_LIST="vnd.android.cursor.dir/vnd.contentproviderproject.member";
//取得一个member信息
public static final String CONTACT_ITEM="vnd.android.cursor.item/vnd.contentproviderproject.member";
//字段名称
public static final String MEMBER_NAME="name";
public static final String MEMBER_AGE="age";
public static final String MEMBER_BIRTHDAY="birthday";
//显示时候的排序字段
public static final String SORT_ORDER="_id DESC";
}
}

定义数据库操作类助手

package com.example.contentproviderprojecrt;
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, MLDNbatabaseMetaData.DATABASE_NAME, null, MLDNbatabaseMetaData.VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 创建表
String sql="CREATE TABLE "+MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME+" ("
+MLDNbatabaseMetaData.MemberTableMetaData._ID+" INTEGER  PRIMARY KEY,"
+MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_NAME+" VARCHAR(50)  NOT NULL,"
+MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_AGE+"  INTEGER  NOT NULL,"
+MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_BIRTHDAY+"   DATE   NOT NULL"
+")";
db.execSQL(sql);//执行SQL语句
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//更新表
String sql="DROP TABLE IF EXISTS "+MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME;
db.execSQL(sql);//执行SQL语句
this.onCreate(db);//更新数据库
}
}

定义表操作contentProvider类

package com.example.contentproviderprojecrt;
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;   //定义UriMatcher对象
private static final int GET_MEMBER_LIST=1;   //查询全部的常量标记
private static final int GET_MEMBER_ITEM=2;   //根据ID查询的常量标记
private MyDatabaseHelper helper=null;      //数据库操作类对象
static{
uriMatcher=new UriMatcher(uriMatcher.NO_MATCH);  //实例化UriMatcher
uriMatcher.addURI(MLDNbatabaseMetaData.AUTHORITY, 
MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME, GET_MEMBER_LIST);//增加匹配项
uriMatcher.addURI(MLDNbatabaseMetaData.AUTHORITY,
MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME+"/#", GET_MEMBER_ITEM);//增加匹配项
}
//删除数据操作
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteDatabase db=this.helper.getWritableDatabase(); //以写的方式打开
int result=0;//操作结果
switch(uriMatcher.match(uri)){//匹配传入的Uri
case GET_MEMBER_LIST:
result=db.delete(MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME, selection, selectionArgs);
break;
case GET_MEMBER_ITEM:
long id=ContentUris.parseId(uri);
String where="_id="+id;
result=db.delete(MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME, where, selectionArgs);
break;
default:
throw new UnsupportedOperationException("NOT SUPPORT OPERATION "+uri);
}
return result;
}
@Override
public String getType(Uri uri) {
switch(uriMatcher.match(uri)){//匹配传入的Uri
case GET_MEMBER_LIST:
return MLDNbatabaseMetaData.MemberTableMetaData.CONTACT_LIST;
case GET_MEMBER_ITEM:
return MLDNbatabaseMetaData.MemberTableMetaData.CONTACT_ITEM;
default:
throw new UnsupportedOperationException("NOT SUPPORT OPERATION "+uri);//抛出异常
}
}
@Override
public Uri insert(Uri uri, ContentValues values) {
SQLiteDatabase db=this.helper.getWritableDatabase();//以写的方式打开
long id=0;   //增加之后的ID
switch(uriMatcher.match(uri)){//匹配传入的Uri
case GET_MEMBER_LIST:
id=db.insert(MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME,
MLDNbatabaseMetaData.MemberTableMetaData._ID, values);
String uriPath=uri.toString();//取出地址
String path=uriPath+"/"+id;   //建立新的URI地址
return Uri.parse(path);
case GET_MEMBER_ITEM:
return null;
default:
throw new UnsupportedOperationException("NOT SUPPORT OPERATION "+uri);
}
}
@Override
public boolean onCreate() {
this.helper=new MyDatabaseHelper(super.getContext());  //实例化DatabaseHelper
return true;  //操作成功
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db=this.helper.getReadableDatabase();//以读的方式打开
switch(uriMatcher.match(uri)){   //匹配传入的Uri
case GET_MEMBER_LIST:
return db.query(MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME,
projection, selection, selectionArgs, null, null, sortOrder);
case GET_MEMBER_ITEM:
long id=ContentUris.parseId(uri);
String where="_id="+id;
return db.query(MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME, projection, 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)){//匹配传入的Uri
case GET_MEMBER_LIST:
result=db.update(MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME, values, null, null);
break;
case GET_MEMBER_ITEM:
long id=ContentUris.parseId(uri);
String where="_id="+id;
result=db.update(MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME, values, where, selectionArgs);
break;
default:
throw new UnsupportedOperationException("NOT SUPPORT OPERATION "+uri);
}
return result;
}
}

Acitivity程序

package com.example.contentproviderprojecrt;
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.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
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.Toast;
public class MainActivity extends Activity {
private Button insertBut=null;
    private Button updateBut=null;
    private Button deleteBut=null;
    private Button queryBut=null;
    private ListView memberList=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
this.insertBut=(Button)super.findViewById(R.id.insertBut);//获取按钮
this.insertBut.setOnClickListener(new InsertOnClickListener());//设置按钮单击事件
this.updateBut=(Button)super.findViewById(R.id.updateBut);//获取按钮
this.updateBut.setOnClickListener(new UpdateOnClickListener());//设置按钮单击事件
this.deleteBut=(Button)super.findViewById(R.id.deleteBut);//获取按钮
this.deleteBut.setOnClickListener(new DeleteOnClickListener());//设置按钮单击事件
this.queryBut=(Button)super.findViewById(R.id.queryBut);//获取按钮
this.queryBut.setOnClickListener(new QueryOnClickListener());//设置按钮单击事件
this.memberList=(ListView)super.findViewById(R.id.memberList);//获取ListView
}
private class QueryOnClickListener implements OnClickListener{//查询按钮事件
@Override
public void onClick(View v) {
Cursor result=MainActivity.this.textQuery(null);//查询的结果集
List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();//用于设置SimpleAdapter
for(result.moveToFirst();!result.isAfterLast();result.moveToNext()){//循环取出数据
Map<String,Object> map=new HashMap<String, Object>();
map.put("_id", result.getInt(0));
map.put("name", result.getString(1));
map.put("age", result.getInt(2));
map.put("birthday", result.getString(3));
list.add(map);  //保存取出的数据
}
   MainActivity.this.memberList.setAdapter(new SimpleAdapter(
   MainActivity.this, //将数据包装
   list, //数据集合
   R.layout.member,//显示的布局文件
   new String[]{"_id","name","age","birthday"}, //匹配的Map  key
   new int[]{R.id._id,R.id.name,R.id.age,R.id.birthday})); //布局文件里面对应的ID
}
}
private class DeleteOnClickListener implements OnClickListener{//删除按钮事件
@Override
public void onClick(View v) {
long result=0;//返回删除了多少条数据
result=MainActivity.this.textDelete(String.valueOf(2));
Toast.makeText(MainActivity.this, "result="+result, Toast.LENGTH_LONG).show();
}
}
private class UpdateOnClickListener implements OnClickListener{//更新按钮事件
@Override
public void onClick(View v) {
long result=0;//返回更新了多少条数据
result=MainActivity.this.textUpdate("1", "李元静", 18, "1998-01-01");
Toast.makeText(MainActivity.this, "result="+result, Toast.LENGTH_LONG).show();
}
}
private class InsertOnClickListener implements OnClickListener{//增加按钮事件
@Override
public void onClick(View v) {
long id=0;//保存接受ID
id=MainActivity.this.textInsert("李元静", 21, new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
Toast.makeText(MainActivity.this, "id="+id, Toast.LENGTH_LONG).show();
}
}
private  Cursor textQuery(String _id){
if(_id==null || "".equals(_id)){//查询全部数据
return super.getContentResolver().query(
MLDNbatabaseMetaData.MemberTableMetaData.CONTENT_URI
, null, null, null,
MLDNbatabaseMetaData.MemberTableMetaData.SORT_ORDER);
}else{//查询指定ID数据
return super.getContentResolver().query(
Uri.withAppendedPath(MLDNbatabaseMetaData.MemberTableMetaData.CONTENT_URI, _id)
, null, null, null,
MLDNbatabaseMetaData.MemberTableMetaData.SORT_ORDER);
}
}
private long textDelete(String _id){
ContentResolver contentSesolver=super.getContentResolver();//定义取得ContentResolver对象
int result=0;
if(_id==null || "".equals(_id)){//删除全部数据
result=contentSesolver.delete(MLDNbatabaseMetaData.MemberTableMetaData.CONTENT_URI, null, null);
}else{//删除指定数据
result=contentSesolver.delete(Uri.withAppendedPath(MLDNbatabaseMetaData.MemberTableMetaData.CONTENT_URI, _id), null, null);
}
return result;
}
private long textInsert(String name,int age,String birthday){
ContentResolver contentSesolver=null;//定义ContentResolver
contentSesolver=super.getContentResolver();//取得contentSesolver
ContentValues values=new ContentValues();//设置内容
values.put(MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_NAME, name);
values.put(MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_AGE, age);
values.put(MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_BIRTHDAY, birthday);
Uri resultUri=contentSesolver.insert(MLDNbatabaseMetaData.MemberTableMetaData.CONTENT_URI, values);
return ContentUris.parseId(resultUri);//解析ID返回
}
private long textUpdate(String _id,String name,int age,String birthday){
long result=0;
ContentResolver contentSesolver=null; //定义ContentResolver
contentSesolver=super.getContentResolver();//取得contentSesolver
ContentValues values=new ContentValues();//设置内容
values.put(MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_NAME, name);
values.put(MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_AGE, age);
values.put(MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_BIRTHDAY, birthday);
if(_id==null || "".equals(_id)){//更新全部
result=contentSesolver.update(MLDNbatabaseMetaData.MemberTableMetaData.CONTENT_URI, values, null, null);
}else{//更新制定数据
result=contentSesolver.update(
Uri.withAppendedPath(MLDNbatabaseMetaData.MemberTableMetaData.CONTENT_URI,
_id), values, null, null);
}
Uri resultUri=contentSesolver.insert(MLDNbatabaseMetaData.MemberTableMetaData.CONTENT_URI, values);
return result;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

Layout:activity_mail.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <LinearLayout
   android:orientation="horizontal"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content" >
   <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>
<ListView 
   android:id="@+id/memberList"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>
</LinearLayout>

member.xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
    <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="30px"
            android:layout_height="wrap_content"/>
        <TextView 
            android:id="@+id/birthday"
            android:layout_width="150px"
            android:layout_height="wrap_content"/>
    </TableRow>
</TableLayout>

版权声明:本文为博主原创文章,未经博主允许不得转载。

android中数据存储的contentprovider的使用方法的更多相关文章

  1. Android中数据存储(四)——ContentProvider存储数据

    目录(?)[+]   当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方 ...

  2. Android中数据存储(三)——SQLite数据库存储数据

    当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方式: 1. Share ...

  3. Android中数据存储(一)

    国庆没有给国家添堵,没有勾搭妹子,乖乖的写着自己的博客..... 本文将为大家介绍Android中数据存储的五种方式,数据存储可是非常重要的知识哦. 一,文件存储数据 ①在ROM存储数据 关于在ROM ...

  4. android中数据存储

    android中数据存储     Android 中存储数据的方式有五种:SQLite数据库.文件存储.内容提供者.网络.SharedPreferences(Key----value)五种存储方式. ...

  5. Android开发数据存储之ContentProvider详解

    转载:十二.ContentProvider和Uri详解 一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可 ...

  6. Android中数据存储之SharedPreferences

    import android.content.Context; import android.content.SharedPreferences; import android.content.Sha ...

  7. Android 中数据存储方式有哪些?

    a) 文件存储b) xml,SharedPreferencec) SQLite数据库d) ContentProvidere) 网络

  8. Android开发手记(19) 数据存储四 ContentProvider

    转载自:http://www.cnblogs.com/devinzhang/archive/2012/01/20/2327863.html Android为数据存储提供了五种方式: 1.SharedP ...

  9. Android笔记——Android中数据的存储方式(三)

    Android系统集成了一个轻量级的数据库:SQLite,所以Android对数据库的支持很好,每个应用都可以方便的使用它.SQLite作为一个嵌入式的数据库引擎,专门适用于资源有限的设备上适量数据存 ...

随机推荐

  1. Android子线程更新UI的方法总结

    版权声明:本文为博主原创文章,转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?postid=6121280 消息机制,对于Android开发者来说,应该是非常 ...

  2. CSS基础(03)

    1.简单了解浏览器是如何渲染页面和加载页面            浏览器就是通过HTTP 协议与服务器进行通信,取到数据之后进行渲染的过程,如图:    这图是园友的看着挺符合我思路就直接拿来用了,从 ...

  3. [cocos2d-x3.0]Xcode 升级到5.1后,cocos2d-x3.0 编译64bit出错解决方案

    转自:http://blog.csdn.net/blucenong/article/details/21198089 把Architectures --->Other 改成 $(ARCHS_ST ...

  4. 理解TCP可靠的通信

    1.TCP通信是可靠的,UDP通信是不可靠的.TCP是怎么保证通信可靠的呢? 2.实际项目中,用到串口通信,也要保证通信可靠,TCP的道理应该也是一样的. 3.通信之前,三次握手.可以这样认为:a.甲 ...

  5. Python 删除目录中特定文件

    代码如下,使用了递归: import sys currDir = sys.path[] import os def removeFile(dir,postfix): if os.path.isdir( ...

  6. 用DirectShow实现视频採集-流程构建

    DirectShow作为DirectX的一个子集,它为用户提供了强大.方便的多媒体开接口,而且它拥有直接操作硬件的能力,这使得它的效率远胜于用GDI等图形方式编写的多媒体程序.前面一篇文章已经对Dir ...

  7. Android 使用 Gmail 来发送邮件

    Android 使用 Gmail 来发送邮件 1. [代码]SendMail.java package org.apache.android.mail; import android.app.Acti ...

  8. xtrabackup原理2

    XTRABACKUP备份原理实现细节——对淘宝数据库内核月报补充 前言 淘宝3月的数据库内核月报对xtrabackup的备份原理做了深入的分析,写的还是很不错.不过Inside君在看完之后,感觉没有对 ...

  9. js new date详解

    创建一个日期对象: var objDate=new Date([arguments list]); var ini_date=new Date(2014,7,0); //是代表7月最后一天 ,也就是2 ...

  10. vs2012调试时为什么会出现clr.dll与mscordacwks.dll版本不匹配

    第一次开发wpf程序,就遇到了上述问题,最后发现是因为vs2012默认用的是.net4.5,将版本改为.net4就好了,问题解决