package edu.hebtu.movingcampus.db;
import java.util.List;
import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
/**
* 尚未完成 query insert 的方法重写
*
* @author wangxin
*
*/
public class DBProvider extends ContentProvider {
private static final int NEWS = 1;
private static final int BLOGS = 2;
private DBHelper mDBHelper = null;
private static final UriMatcher URIMATCHER;
static {
URIMATCHER = new UriMatcher(UriMatcher.NO_MATCH);
URIMATCHER.addURI(DatabaseColumn.AUTHORITY, CourseColumn.TABLE_NAME,
BLOGS);
}
/**
* Init DB
*/
@Override
public boolean onCreate() {
// TODO Auto-generated method stub
mDBHelper = DBHelper.getInstance(getContext());
SQLiteDatabase db = mDBHelper.getReadableDatabase();
return db == null ? false : true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
return null;
}
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
long rowId = 0;
int witch = URIMATCHER.match(uri);
switch (witch) {
case NEWS:
break;
case BLOGS:
rowId = insert(CourseColumn.TABLE_NAME, null, values);
break;
}
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
int count = 0;
int witch = URIMATCHER.match(uri);
switch (witch) {
case NEWS:
count = delete(NewsColumn.TABLE_NAME, selection, selectionArgs);
notifyChange(uri);
break;
case BLOGS:
count = delete(CourseColumn.TABLE_NAME, selection, selectionArgs);
notifyChange(uri);
break;
}
return count;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
int count = 0;
switch (URIMATCHER.match(uri)) {
case NEWS:
count = update(NewsColumn.TABLE_NAME, values, selection,
selectionArgs);
notifyChange(uri);
break;
case BLOGS:
count = update(CourseColumn.TABLE_NAME, values, selection,
selectionArgs);
notifyChange(uri);
break;
}
return count;
}
/********* Define Insert Delete Update Query ***********/
private Cursor query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy) {
synchronized (mDBHelper) {
SQLiteDatabase db = mDBHelper.getReadableDatabase();
if (db == null || !db.isOpen()) {
return null;
}
try {
return db.query(table, columns, selection, selectionArgs,
groupBy, having, orderBy);
} catch (Exception e) {
return null;
}
}
}
private int delete(String table, String where, String[] whereArgs) {
synchronized (mDBHelper) {
SQLiteDatabase db = mDBHelper.getReadableDatabase();
if (db == null || !db.isOpen()) {
return 0;
}
try {
return db.delete(table, where, whereArgs);
} catch (Exception e) {
return 0;
}
}
}
private int update(String table, ContentValues values, String whereClause,
String[] whereArgs) {
synchronized (mDBHelper) {
SQLiteDatabase db = mDBHelper.getReadableDatabase();
if (db == null || !db.isOpen()) {
return 0;
}
try {
return db.update(table, values, whereClause, whereArgs);
} catch (Exception e) {
return 0;
}
}
}
private long insert(String table, String nullColumnHack,
ContentValues values) {
synchronized (mDBHelper) {
SQLiteDatabase db = mDBHelper.getReadableDatabase();
if (db == null || !db.isOpen()) {
return 0;
}
return db.insert(table, nullColumnHack, values);
}
}
private void notifyChange(List<Uri> uri) {
ContentResolver cr = getContext().getContentResolver();
for (int i = 0; i < uri.size(); i++) {
cr.notifyChange(uri.get(i), null);
}
}
private void notifyChange(Uri uri) {
ContentResolver cr = getContext().getContentResolver();
cr.notifyChange(uri, null);
}
}