Android――ContentProvider (一)创建contentProvider

一、在AndroidManifest.xml文件中添加

 <provider
            android:name=".StudentProvider"
            android:authorities="com.example.android_contentprovider2.StudentProvider" >
  </provider>
二、创建数据库SqliteOpenHelper
public class DbHelper extends SQLiteOpenHelper {

private static String name = "mydb.db";
private static int version = 1;// 初始的版本号是一

public DbHelper(Context context) {
super(context, name, null, version);
// TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase database) {
// TODO Auto-generated method stub
String sql = "create table student (id integer primary key autoincrement ,name varchar(64) ,address varchar(64))";
database.execSQL(sql);// 对数据库的表的创建
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub

}

}


三、创建ContentProvider

public class StudentProvider extends ContentProvider {

private final String TAG = "StudentProvider";

private DbHelper helper = null;

private static final UriMatcher URI_MATCHER = new UriMatcher(
UriMatcher.NO_MATCH);
private static final int STUDENT = 1;// 操作单条记录
private static final int STUDENTS = 2;// 操作多条记录
static {
URI_MATCHER.addURI(
"com.example.android_contentprovider2.StudentProvider",
"student", STUDENTS);

URI_MATCHER.addURI(
"com.example.android_contentprovider2.StudentProvider",
"student/#", STUDENT);
}

public StudentProvider() {
// TODO Auto-generated constructor stub
}

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
int count = -1;// 影响数据库的行数
try {
int flag = URI_MATCHER.match(uri);
SQLiteDatabase database = helper.getWritableDatabase();
switch (flag) {
case STUDENT:
// content://com.example.android_contentprovider2.StudentProvider/student/1
// delete from student where id = ? //id 通过客户端传递过来的
long id = ContentUris.parseId(uri);
String where_value = " id = " + id;
if (selection != null && !selection.equals("")) {
where_value += " and " + selection;
}
count = database.delete("student", where_value, selectionArgs);
break;
case STUDENTS:
count = database.delete("student", selection, selectionArgs);
break;
}
} catch (Exception e) {
// TODO: handle exception
}
return count;
}

@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
int flag = URI_MATCHER.match(uri);
switch (flag) {
case STUDENT:
return "vnd.android.cursor.item/student";
case STUDENTS:
return "vnd.android.cursor.dir/students";
}
return null;
}

@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
// insert into student () (?,?);
Uri resultUri = null;
int flag = URI_MATCHER.match(uri);
switch (flag) {
case STUDENTS:
SQLiteDatabase database = helper.getWritableDatabase();
long id = database.insert("student", null, values);// 插入当前行的行号
resultUri = ContentUris.withAppendedId(uri, id);
break;
}
Log.i(TAG, "---->>" + resultUri.toString());
return resultUri;
}

@Override
public boolean onCreate() {
// TODO Auto-generated method stub
helper = new DbHelper(getContext());
return true;
}

@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
Cursor cursor = null;
try {
SQLiteDatabase database = helper.getReadableDatabase();
int flag = URI_MATCHER.match(uri);
switch (flag) {
case STUDENT:
long id = ContentUris.parseId(uri);
String where_value = " id = " + id;
if (selection != null && !selection.equals("")) {
where_value += " and " + selection;
}
cursor = database.query("student", null, where_value,
selectionArgs, null, null, null, null);
break;
case STUDENTS:
cursor = database.query("student", null, selection,
selectionArgs, null, null, null);
break;
}
} catch (Exception e) {
// TODO: handle exception
}
return cursor;
}

@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
int count = -1;
try {
// update table set name = ? ,address = ? where id = ?
SQLiteDatabase database = helper.getWritableDatabase();
long id = ContentUris.parseId(uri);
int flag = URI_MATCHER.match(uri);
switch (flag) {
case STUDENT:
String where_value = " id = " + id;
if (selection != null && !selection.equals("")) {
where_value += " and " + selection;
}
count = database.update("student", values, where_value,
selectionArgs);
break;

}
} catch (Exception e) {
// TODO: handle exception
}
return count;
}

}


你可能感兴趣的:(android,version,public)