元数据接口

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>

更多相关文章

  1. Android之drawable state各个属性详解
  2. Android中json操作数据的使用
  3. android 按钮按下时改变字体颜色
  4. android 网络获取图片并存储
  5. android SharePrefereces的使用入门
  6. android 利用ksoap2方式连接webservice
  7. android 利用Gson生成json数据
  8. 关于Android(安卓)中sqlite 报can not open database错误
  9. mybatisplus的坑 insert标签insert into select无参数问题的解决

随机推荐

  1. Android命令行工具logcat详细用法!
  2. Android开发-一个简单的五子棋游戏
  3. Android(安卓)studio如何导入Eclispe项目
  4. Android开发者网址导航
  5. Android(安卓)Activity生命周期
  6. Android(安卓)框架层为IMountService 增
  7. 推荐给Android开发者的七本图灵书
  8. Android下junit单元测试、logCat的使用
  9. android Matrix原理
  10. Android编码规范