ContentProvider示例

本文详细介绍了一个ContentProvider的具体实现案例,包括数据库操作类DbHelper的创建、业务逻辑层UserService的实现,以及ContentProvider类MyContentProvider的构建过程。通过具体代码展示了如何进行数据插入、删除、更新和查询等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ContentProvider示例

    //数据库管理层
	//数据库操作工具类
	public class DbHelper extends SQLiteOpenHelper
	{
	   private static final int VERSION=1;
	   private static final String DBNAME="appDataBase";//数据库名称
	   
	   public DbHelper(Context context)//构造方法
	      {super(context, DBNAME, null, VERSION)}//必须调用父类的构造方法
		  
	   public DbHelper(Context context,int version)//构造方法
	      {super(context, DBNAME, null, version)}//必须调用父类的构造方法
		  
	    abstract onCreate(SQLiteDatabase db)//当数据库第一次加载时执行此方法
		{
		   db.execSQL(" create table tb_user(userid int not null primary key auto_increment,
                                         username varchar(20)) ");
		   db.execSQL(" create table tb_rz(rzid int not null primary key auto_increment,
                                         rzbt  varchar(30)), rznr userid int not null 
                                         foreign key(tb_rz) references (tb_user) ");
		}
		
		abstract onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)//数据库版本管理
		{
		   //版本升级应考虑保存原有数据,有待改进
		   db.execSQL(" drop table if exists tb_user;create table tb_user(userid int not null
                                          primary key auto_increment,name varchar(20)) ");
		   db.execSQL(" drop table if exists tb_rz;create table tb_rz(rzid int not null
                                         primary key auto_increment, rzbt  varchar(30)),
                                         rznr userid int not null foreign key(tb_rz) references (tb_user) ");
		}
	
	}
	//业务逻辑层
    //用户表service	
	class UserService
	{
	   private DbHelper dbHelper=null;
	   private Cursor=null;//get set方法
	   
	   public UserService(Context context)
	   {  dbHelper=new DbHelper(context); }
	   
	   public UserService(Context context,int version)
	   {this.context=context;  dbHelper=new DbHelper(context,version);}
	   
	   public long insert(ContentValues values)
	   {
	      SQLiteDatabase db=dbHelper.getWritableDatabase();
		  long id=db.insert("tb_user","username",values );
		  return id;  
		  //db.close();没有必要关闭数据库,SQLiteOpenHelper默认要缓存数据库
	   }
	   
	   public int  delete(String where,String[] whereArgs)//依据userid删除
	   {
	      SQLiteDatabase db=dbHelper.getWritableDatabase();
		  int count=db.delete("tb_user",where,whereArgs );
		  return count; 
		  //db.close();没有必要关闭数据库,SQLiteOpenHelper默认要缓存数据库
	   }
	   
	   public int  update(ContentVaues values,String where,String [] whereArgs)//依据userid更新
	   {
	      SQLiteDatabase db=dbHelper.getWritableDatabase();
		  int count=db.update("tb_user",values,whereArgs );
		  return count;
		  //db.close();没有必要关闭数据库,SQLiteOpenHelper默认要缓存数据库
	   }	   
	   
           //查询user表中的所有记录
	   public List<user> query(String[] columns,String where,String [] whereArgs)
	   {
	      List<User> users=new ArraryList<User>();
		  SQLiteDatabase db=dbHelper.getReadableDatabase();
		  Cursor cursor=db.query("tb_user",columns,where,whereArgs);
		  this.cursor=cursor;
		  while(cursor.moveTonext())
		  {
		    User user=new User();
		    int userid=cursor.getInteger(cursor.getColumnIndex(""));
			Stirng username=cursor.getString(cursor.getColumnIndex("username"));
			
			user.setUserid(userid);
			user.setUsername(username);
			users.add(user);
		  }
		  return users;
	   }
	}
	
	//日志表service
	class RzService
	{ 。。。。。。。}
	
    //应用的ContentProvider类MyContentProvider
	class MyContentProvider extends ContentProvider
	{
	    private UserService userService=null;
		private RzService rzService=null;
		
	    public boolean onCreate()//初始化业务对象
		{
		  userService=new UserService(this.getContext() );
		  rzService=new RzService(this.getContext() );
		  return true;
		}
		
	    public Uri insert(Uri uri,ContentValues values)
		{
		   int macth=myMatcher.macth(uri);
		   long id=-1;
           Uri tempUri=null;		   
		   if(match==USERS)
		   {
		      id=userService.insert(values);
			  tempUri=ContentUris.withAppendedId(uri,id);
			  return tempUri;
		   }
		   
		   if((match==USER)
		   {
		      id=userService.insert(values);
			  String path=uri.toString();
			  tempUri=Uri.parse(path.subString(0,path.lastIndexOf("/"))+id);//重新解析Uri
			  return tempUri;
		   }
		   
		   if(match==RZS) {...}
		   if(match==RZ) {...}
		}
	    public int delete(Uri uri,String where,String[] whereArgs)
		{
		  int macth=myMatcher.macth(uri);
		   int count=-1;		   
		   if(match==USERS)
		   {
		      count=userService.delete(where,whereArgs);
			  return count;
		   }
		   
		   if((match==USER)
		   {
		       String [] tempWhereArgs=null;
			   String tempWhere="";
			   long id=ContentUris.parseId(uri);
			   if(!where.equals("") && whereArgs!=null)
			   {
			      tempWhereArgs=new String[whereArgs.length()+1];
			      for(int i=0;i<whereArgs.length();i++)
				  {
				     tempWhereArgs[i]=whereArgs[i];
				  }
				  tempWhereArgs[whereArgs.length()+1]=String.valueOf(id);
				  tempWhere=where+"and userid=?"
			   }
			   else
			   {
			      tempWhereArgs=new String []{String.valueOf(id)};
			      tempWhere="and userid=?";
			   }
			   count=db.delete(tempWhere,tempWhereArgs);
		   }
		   
		   if(match==RZS) {...}
		   if(match==RZ) {...}
		}
		}
	    public Cursor query(Uri uri,String[] columnNames,Stirng where,
                                            String whereArgs,String order);
	    public update(Uri uri,ContentValues values,String where,String whereArgs);
	
        //用户表tb_user(userid),日志表tb_rz(rzid)
        private final static int USERS=1;
        private final static int USER=11;
		private final static int RZS=2;
		private final static int RZ=21;
		private UriMatcher myMatcher=new UriMatcher(-1);
		
		//建立uri匹配库
		static
		{
		   myMatcher。addUri("com.ssj.android.provider","tb_user",USERS);
		   myMatcher。addUri("com.ssj.android.provider","tb_user/#",USER);
		   myMatcher。addUri("com.ssj.android.provider","tb_rz",RZS);
		   myMatcher。addUri("com.ssj.android.provider","tb_rz/#",RZ);
		}
		
		public Stirng getType(Uri uri)
		{
		   int macth=myMatcher.macth(uri);
		   switch(macth)
		   {
		      case USERS:  
			         return "vnd.android.cursor.dir/tb_user"; break;
			  case USER:  
			         return "vnd.android.cursor.item/tb_user"; break;
			  case RZS:  
			         return return "vnd.android.cursor.dir/tb_rz"; break;
			  case RZ:  
			         return "vnd.android.cursor.item/tb_rz"; break;		
			  default:
			  return null;
		   }
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值