<pre name="code" class="java">package com.example.a05262;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class MyOpenHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "school.db";
private static final int VERSION = 1;
// 构造器的使用
// 参数1. 上下文 从外部传入
// 参数2. 数据库名称。可以写一个固定的常量
// 参数3. 工厂。
// 参数4. 数据库的版本
public MyOpenHelper(Context context) {
super(context, DB_NAME, null, VERSION);
}
// 创建数据库时调用
// 留意db对象已经通过参数传递到onCreate()中
// 说明第一步:创建数据库的操作openOrCreateDatabase()已经做好了
// 这里只需要进行第二部:创建表就可以了
@Override
public void onCreate(SQLiteDatabase db) {
// 创建三个表:student course score
String sql = "CREATE TABLE IF NOT EXISTS [student] ( [_id] INTEGER PRIMARY KEY AUTOINCREMENT, [name] TEXT(10), [age] INTEGER);";
db.execSQL(sql);
sql = "CREATE TABLE IF NOT EXISTS [course] ([_id] INTEGER PRIMARY KEY AUTOINCREMENT, [name] TEXT(10));";
db.execSQL(sql);
sql = "CREATE TABLE IF NOT EXISTS [score] ([s_id] INTEGER, [c_id] INTEGER, [score] INTEGER);";
db.execSQL(sql);
}
// 数据库升级时调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
/**
* 继承ContentProvider内容提供商、服务端
*
* 在静态代码块中添加匹配规则:
* content://com.myprorider/student/
* content://com.myprorider/student/1
* content://com.myprorider/student/刘德华
*
*/
public class MyProrider extends ContentProvider {
//UriMatcher对象,用于对Uri进行匹配
private static final UriMatcher MATCHER=new UriMatcher(UriMatcher.NO_MATCH);
private MyOpenHelper helper;//数据库的辅助类
static{
//添加可匹配的uri规则
MATCHER.addURI("com.mma", "student", 1);//返回1
MATCHER.addURI("com.mma", "student/#", 2);//#匹配所有的数字
MATCHER.addURI("com.mma", "student/*", 3);//*匹配所有的字符
}
@Override
public boolean onCreate() {
helper=new MyOpenHelper(getContext());
return false;
}
@Override// 查询
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
SQLiteDatabase db=helper.getReadableDatabase();
int match=MATCHER.match(uri);
switch (match) {
case 1:
return db.query("student",
projection,
selection,
selectionArgs,
null,null,null);
case 2:
long id=ContentUris.parseId(uri);
String where="_id="+id;
if(selection!=null && !"".endsWith(selection)){
where+=" AND "+selection;
}
return db.query("student",
projection,
where,
selectionArgs,
null,null,sortOrder);
case 3:
String path=uri.getLastPathSegment();//获取uri的后面的名字
String where1="name= '"+path+"'";
if(selection!=null && !"".equals(selection)){
where1+=" AND "+selection;
}
return db.query("student", projection,
where1,
selectionArgs,
null, null, null);
default:
break;
}
return null;
}
@Override
public String getType(Uri uri) {
return null;
}
@Override//插入
public Uri insert(Uri uri, ContentValues values) {
/* //对传入的uri进行匹配
int match=MATCHER.match(uri);
Log.i("MainActivity", match+"");*/
SQLiteDatabase db=helper.getWritableDatabase();
int match=MATCHER.match(uri);
switch (match) {
case 1:
long id=db.insert("student",null, values);
//给uri添加id
return ContentUris.withAppendedId(uri, id);
default:
break;
}
return null;
}
@Override//删除
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteDatabase db=helper.getWritableDatabase();
int match=MATCHER.match(uri);
switch (match) {
case 1:
return db.delete("student",
selection,
selectionArgs);
case 2:
long id=ContentUris.parseId(uri);// 获得uri的id
String where="_id="+id;//id等于传进来的id
if(selection!=null && "".equals(selection)){
where+=" AND "+selection;
}
return db.delete("student",where, selectionArgs);
case 3:
String path=uri.getLastPathSegment();//获取uri后面的字符
return db.delete("student", "name=?", new String[]{path});
default:
break;
}
return 0;
}
@Override//修改
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
SQLiteDatabase db=helper.getWritableDatabase();
int match=MATCHER.match(uri);
switch (match) {
case 1:
return db.update("student",
values,
selection,
selectionArgs);
case 2:
long id=ContentUris.parseId(uri);//获得传进来的uri后面的id
String where="_id="+id;
return db.update("student", values, where, selectionArgs);
case 3:
String path=uri.getLastPathSegment();
db.update("student", values, "name=?", new String[]{path});
break;
default:
break;
}
return 0;
}
}