元数据接口

packagecom.example.contentproviderprojecrt;

importandroid.net.Uri;

importandroid.provider.BaseColumns;

publicinterfaceMLDNbatabaseMetaData{

//外部访问,content地址://com.example.contentproviderproject

publicstaticfinalStringAUTHORITY="com.example.contentproviderproject";

//数据库的名称

publicstaticfinalStringDATABASE_NAME="mldn.db";

//数据库的版本

publicstaticfinalintVERSION=1;

//member表的元素定义,直接继承与_ID_COUNT静态变量

publicstaticinterfaceMemberTableMetaDataextendsBaseColumns{

//数据表的名称

publicstaticfinalStringTABLE_NAME="member";

//外部访问的URI地址

publicstaticfinalUriCONTENT_URI=Uri.parse("content://"+

AUTHORITY+"/"+TABLE_NAME);

//取得member表中的所有数据

publicstaticfinalStringCONTACT_LIST="vnd.android.cursor.dir/vnd.contentproviderproject.member";

//取得一个member信息

publicstaticfinalStringCONTACT_ITEM="vnd.android.cursor.item/vnd.contentproviderproject.member";

//字段名称

publicstaticfinalStringMEMBER_NAME="name";

publicstaticfinalStringMEMBER_AGE="age";

publicstaticfinalStringMEMBER_BIRTHDAY="birthday";

//显示时候的排序字段

publicstaticfinalStringSORT_ORDER="_idDESC";

}

}

定义数据库操作类助手

packagecom.example.contentproviderprojecrt;

importandroid.content.Context;

importandroid.database.sqlite.SQLiteDatabase;

importandroid.database.sqlite.SQLiteDatabase.CursorFactory;

importandroid.database.sqlite.SQLiteOpenHelper;

publicclassMyDatabaseHelperextendsSQLiteOpenHelper{

publicMyDatabaseHelper(Contextcontext){

//创建数据库

super(context,MLDNbatabaseMetaData.DATABASE_NAME,null,MLDNbatabaseMetaData.VERSION);

}

@Override

publicvoidonCreate(SQLiteDatabasedb){

//创建表

Stringsql="CREATETABLE"+MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME+"("

+MLDNbatabaseMetaData.MemberTableMetaData._ID+"INTEGERPRIMARYKEY,"

+MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_NAME+"VARCHAR(50)NOTNULL,"

+MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_AGE+"INTEGERNOTNULL,"

+MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_BIRTHDAY+"DATENOTNULL"

+")";

db.execSQL(sql);//执行SQL语句

}

@Override

publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){

//更新表

Stringsql="DROPTABLEIFEXISTS"+MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME;

db.execSQL(sql);//执行SQL语句

this.onCreate(db);//更新数据库

}

}

定义表操作contentProvider

packagecom.example.contentproviderprojecrt;

importandroid.content.ContentProvider;

importandroid.content.ContentUris;

importandroid.content.ContentValues;

importandroid.content.UriMatcher;

importandroid.database.Cursor;

importandroid.database.sqlite.SQLiteDatabase;

importandroid.net.Uri;

publicclassMemberContentProviderextendsContentProvider{

privatestaticUriMatcheruriMatcher=null;//定义UriMatcher对象

privatestaticfinalintGET_MEMBER_LIST=1;//查询全部的常量标记

privatestaticfinalintGET_MEMBER_ITEM=2;//根据ID查询的常量标记

privateMyDatabaseHelperhelper=null;//数据库操作类对象

static{

uriMatcher=newUriMatcher(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

publicintdelete(Uriuri,Stringselection,String[]selectionArgs){

SQLiteDatabasedb=this.helper.getWritableDatabase();//以写的方式打开

intresult=0;//操作结果

switch(uriMatcher.match(uri)){//匹配传入的Uri

caseGET_MEMBER_LIST:

result=db.delete(MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME,selection,selectionArgs);

break;

caseGET_MEMBER_ITEM:

longid=ContentUris.parseId(uri);

Stringwhere="_id="+id;

result=db.delete(MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME,where,selectionArgs);

break;

default:

thrownewUnsupportedOperationException("NOTSUPPORTOPERATION"+uri);

}

returnresult;

}

@Override

publicStringgetType(Uriuri){

switch(uriMatcher.match(uri)){//匹配传入的Uri

caseGET_MEMBER_LIST:

returnMLDNbatabaseMetaData.MemberTableMetaData.CONTACT_LIST;

caseGET_MEMBER_ITEM:

returnMLDNbatabaseMetaData.MemberTableMetaData.CONTACT_ITEM;

default:

thrownewUnsupportedOperationException("NOTSUPPORTOPERATION"+uri);//抛出异常

}

}

@Override

publicUriinsert(Uriuri,ContentValuesvalues){

SQLiteDatabasedb=this.helper.getWritableDatabase();//以写的方式打开

longid=0;//增加之后的ID

switch(uriMatcher.match(uri)){//匹配传入的Uri

caseGET_MEMBER_LIST:

id=db.insert(MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME,

MLDNbatabaseMetaData.MemberTableMetaData._ID,values);

StringuriPath=uri.toString();//取出地址

Stringpath=uriPath+"/"+id;//建立新的URI地址

returnUri.parse(path);

caseGET_MEMBER_ITEM:

returnnull;

default:

thrownewUnsupportedOperationException("NOTSUPPORTOPERATION"+uri);

}

}

@Override

publicbooleanonCreate(){

this.helper=newMyDatabaseHelper(super.getContext());//实例化DatabaseHelper

returntrue;//操作成功

}

@Override

publicCursorquery(Uriuri,String[]projection,Stringselection,

String[]selectionArgs,StringsortOrder){

SQLiteDatabasedb=this.helper.getReadableDatabase();//以读的方式打开

switch(uriMatcher.match(uri)){//匹配传入的Uri

caseGET_MEMBER_LIST:

returndb.query(MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME,

projection,selection,selectionArgs,null,null,sortOrder);

caseGET_MEMBER_ITEM:

longid=ContentUris.parseId(uri);

Stringwhere="_id="+id;

returndb.query(MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME,projection,where,selectionArgs,null,null,sortOrder);

default:

thrownewUnsupportedOperationException("NOTSUPPORTOPERATION"+uri);

}

}

@Override

publicintupdate(Uriuri,ContentValuesvalues,Stringselection,

String[]selectionArgs){

SQLiteDatabasedb=this.helper.getWritableDatabase();//以写的方式打开

intresult=0;//操作结果

switch(uriMatcher.match(uri)){//匹配传入的Uri

caseGET_MEMBER_LIST:

result=db.update(MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME,values,null,null);

break;

caseGET_MEMBER_ITEM:

longid=ContentUris.parseId(uri);

Stringwhere="_id="+id;

result=db.update(MLDNbatabaseMetaData.MemberTableMetaData.TABLE_NAME,values,where,selectionArgs);

break;

default:

thrownewUnsupportedOperationException("NOTSUPPORTOPERATION"+uri);

}

returnresult;

}

}

Acitivity程序

packagecom.example.contentproviderprojecrt;

importjava.text.SimpleDateFormat;

importjava.util.ArrayList;

importjava.util.Date;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importandroid.net.Uri;

importandroid.os.Bundle;

importandroid.app.Activity;

importandroid.content.ContentResolver;

importandroid.content.ContentUris;

importandroid.content.ContentValues;

importandroid.database.Cursor;

importandroid.view.Menu;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.ListView;

importandroid.widget.SimpleAdapter;

importandroid.widget.Toast;

publicclassMainActivityextendsActivity{

privateButtoninsertBut=null;

privateButtonupdateBut=null;

privateButtondeleteBut=null;

privateButtonqueryBut=null;

privateListViewmemberList=null;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

super.setContentView(R.layout.activity_main);

this.insertBut=(Button)super.findViewById(R.id.insertBut);//获取按钮

this.insertBut.setOnClickListener(newInsertOnClickListener());//设置按钮单击事件

this.updateBut=(Button)super.findViewById(R.id.updateBut);//获取按钮

this.updateBut.setOnClickListener(newUpdateOnClickListener());//设置按钮单击事件

this.deleteBut=(Button)super.findViewById(R.id.deleteBut);//获取按钮

this.deleteBut.setOnClickListener(newDeleteOnClickListener());//设置按钮单击事件

this.queryBut=(Button)super.findViewById(R.id.queryBut);//获取按钮

this.queryBut.setOnClickListener(newQueryOnClickListener());//设置按钮单击事件

this.memberList=(ListView)super.findViewById(R.id.memberList);//获取ListView

}

privateclassQueryOnClickListenerimplementsOnClickListener{//查询按钮事件

@Override

publicvoidonClick(Viewv){

Cursorresult=MainActivity.this.textQuery(null);//查询的结果集

List<Map<String,Object>>list=newArrayList<Map<String,Object>>();//用于设置SimpleAdapter

for(result.moveToFirst();!result.isAfterLast();result.moveToNext()){//循环取出数据

Map<String,Object>map=newHashMap<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(newSimpleAdapter(

MainActivity.this,//将数据包装

list,//数据集合

R.layout.member,//显示的布局文件

newString[]{"_id","name","age","birthday"},//匹配的Mapkey

newint[]{R.id._id,R.id.name,R.id.age,R.id.birthday}));//布局文件里面对应的ID

}

}

privateclassDeleteOnClickListenerimplementsOnClickListener{//删除按钮事件

@Override

publicvoidonClick(Viewv){

longresult=0;//返回删除了多少条数据

result=MainActivity.this.textDelete(String.valueOf(2));

Toast.makeText(MainActivity.this,"result="+result,Toast.LENGTH_LONG).show();

}

}

privateclassUpdateOnClickListenerimplementsOnClickListener{//更新按钮事件

@Override

publicvoidonClick(Viewv){

longresult=0;//返回更新了多少条数据

result=MainActivity.this.textUpdate("1","李元静",18,"1998-01-01");

Toast.makeText(MainActivity.this,"result="+result,Toast.LENGTH_LONG).show();

}

}

privateclassInsertOnClickListenerimplementsOnClickListener{//增加按钮事件

@Override

publicvoidonClick(Viewv){

longid=0;//保存接受ID

id=MainActivity.this.textInsert("李元静",21,newSimpleDateFormat("yyyy-MM-dd").format(newDate()));

Toast.makeText(MainActivity.this,"id="+id,Toast.LENGTH_LONG).show();

}

}

privateCursortextQuery(String_id){

if(_id==null||"".equals(_id)){//查询全部数据

returnsuper.getContentResolver().query(

MLDNbatabaseMetaData.MemberTableMetaData.CONTENT_URI

,null,null,null,

MLDNbatabaseMetaData.MemberTableMetaData.SORT_ORDER);

}else{//查询指定ID数据

returnsuper.getContentResolver().query(

Uri.withAppendedPath(MLDNbatabaseMetaData.MemberTableMetaData.CONTENT_URI,_id)

,null,null,null,

MLDNbatabaseMetaData.MemberTableMetaData.SORT_ORDER);

}

}

privatelongtextDelete(String_id){

ContentResolvercontentSesolver=super.getContentResolver();//定义取得ContentResolver对象

intresult=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);

}

returnresult;

}

privatelongtextInsert(Stringname,intage,Stringbirthday){

ContentResolvercontentSesolver=null;//定义ContentResolver

contentSesolver=super.getContentResolver();//取得contentSesolver

ContentValuesvalues=newContentValues();//设置内容

values.put(MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_NAME,name);

values.put(MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_AGE,age);

values.put(MLDNbatabaseMetaData.MemberTableMetaData.MEMBER_BIRTHDAY,birthday);

UriresultUri=contentSesolver.insert(MLDNbatabaseMetaData.MemberTableMetaData.CONTENT_URI,values);

returnContentUris.parseId(resultUri);//解析ID返回

}

privatelongtextUpdate(String_id,Stringname,intage,Stringbirthday){

longresult=0;

ContentResolvercontentSesolver=null;//定义ContentResolver

contentSesolver=super.getContentResolver();//取得contentSesolver

ContentValuesvalues=newContentValues();//设置内容

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);

}

UriresultUri=contentSesolver.insert(MLDNbatabaseMetaData.MemberTableMetaData.CONTENT_URI,values);

returnresult;

}

@Override

publicbooleanonCreateOptionsMenu(Menumenu){

//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.

getMenuInflater().inflate(R.menu.main,menu);

returntrue;

}

}

Layout:activity_mail.xml

<LinearLayoutxmlns: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

<?xmlversion="1.0"encoding="utf-8"?>

<TableLayoutxmlns: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>

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. python起点网月票榜字体反爬案例
  3. Android(安卓)拨号器的简单实现
  4. 《Android开发从零开始》——25.数据存储(4)
  5. Android系统配置数据库注释(settings.db)
  6. android用户界面之按钮(Button)教程实例汇
  7. Android中不同应用间实现SharedPreferences数据共享
  8. Android开发环境搭建
  9. haproxy根据客户端浏览器进行跳转

随机推荐

  1. Android(安卓)icon files
  2. Android实现多层级Spinner列表选项实时更
  3. Android项目开发注意事项
  4. android 查看 当前activity
  5. 实例教程八:采用ListView实现数据列表显示
  6. android解决同一个界面上ScrollView和百
  7. Android硬件服务访问流程
  8. android 音频总结
  9. android 设置系统屏幕亮度
  10. 【Android】Web开发之通过标准Java接口处