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