1.建立一個類繼承SQLiteOpenHelper(若使用SQLite):
public class MySQLiteHelper extends SQLiteOpenHelper
{
//重寫構造方法
public MySQLiteHelper(Context context, String name, CursorFactory factory,
int version)
{
super(context, name, factory, version);
}
//建立表
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE person(personid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),phone VARCHAR(20))" );
}
//更新表(當Database的Version低于目前new裡的Version,直接執行下面方法)
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
int v = newVersion - oldVersion;
if(v > 0)
{
db.execSQL("ALTER TABLE person ADD salary3 VARCHAR(20)");
}
}
}
2.建立自定義ContentProvider:
public class MyContentProvider extends ContentProvider
{
private MySQLiteHelper mDBHelper;
public MyContentProvider()
{
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
int i = db.delete("person", selection,selectionArgs);
return i;
}
@Override
public String getType(Uri uri)
{
throw new UnsupportedOperationException("Not yet implemented");
}
//建立Uri
private static final Uri URI = Uri.parse("content://com.example.cpone");
@Override//插入
public Uri insert(Uri uri, ContentValues values)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
long id = db.insert("person", null , values);
return ContentUris.withAppendedId(URI, id); //相當于原先的Uri加上插入的行号
}
@Override
public boolean onCreate()//建立表
{
mDBHelper = new MySQLiteHelper(getContext(), "person", null, 1);
return false;
}
@Override//查詢
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
Cursor cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);
return cursor;
}
@Override//修改
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
int i = db.update("person", values, selection, selectionArgs);
return i;
}
}
3.在另一個項目裡使用自定義ContentProvider:
public class MyContentProvider extends ContentProvider
{
private MySQLiteHelper mDBHelper;
public MyContentProvider()
{
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
int i = db.delete("person", selection,selectionArgs);
return i;
}
@Override
public String getType(Uri uri)
{
throw new UnsupportedOperationException("Not yet implemented");
}
//建立Uri
private static final Uri URI = Uri.parse("content://com.example.cpone");
@Override//插入
public Uri insert(Uri uri, ContentValues values)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
long id = db.insert("person", null , values);
return ContentUris.withAppendedId(URI, id); //相當于原先的Uri加上插入的行号
}
@Override
public boolean onCreate()//建立表
{
mDBHelper = new MySQLiteHelper(getContext(), "person", null, 1);
return false;
}
@Override//查詢
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
Cursor cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);
return cursor;
}
@Override//修改
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
int i = db.update("person", values, selection, selectionArgs);
return i;
}
}
注:
1.ContentProvider仍在主線程上運作,但對他的調用是異步的,不使用消息隊列。