Android ContentProvider对数据库的基本操作

  • BookDao
public class BookDao extends SQLiteOpenHelper {
    private static final String DB_NAME = "book.db";
    private static final int DB_VERSION = 1;

    public static final String BOOK_TABLE_NAME = "book";
    public static final String USER_TABLE_NAME = "user";

    private static final String BOOK_TABLE = "create table " + BOOK_TABLE_NAME
            + "(_id integer primary key,"
            + "name text)";

    private static final String USER_TABLE = "create table " + USER_TABLE_NAME
            + "(_id integer primary key,"
            + "name text,"
            + "sex integer)";

    public BookDao(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(BOOK_TABLE);
        sqLiteDatabase.execSQL(USER_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}
  • BookProvider
public class BookProvider extends ContentProvider {
    private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    private static final String AUTHORITY = "com.vincent.provider";
    public static final Uri BOOK_URI = Uri.parse("content://" + AUTHORITY + "/book");
    public static final Uri USER_URI = Uri.parse("content://" + AUTHORITY + "/user");
    private static final int BOOK_CODE = 0;
    private static final int USER_CODE = 1;

    private Context mContext;
    private BookDao mBookHelper;

    static {
        sUriMatcher.addURI(AUTHORITY, "book", BOOK_CODE);
        sUriMatcher.addURI(AUTHORITY, "user", USER_CODE);
    }

    private String getTableName(Uri uri) {
        String tableName = null;
        switch (sUriMatcher.match(uri)) {
            case BOOK_CODE:
                tableName = BookDao.BOOK_TABLE_NAME;
                break;
            case USER_CODE:
                tableName = BookDao.USER_TABLE_NAME;
                break;
            default:
                break;
        }
        return tableName;
    }

    @Override
    public boolean onCreate() {
        mContext = getContext();
        mBookHelper = new BookDao(mContext);
        return true;
    }

    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] columns, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String groupBy) {
        SQLiteDatabase sqLiteDatabase = mBookHelper.getReadableDatabase();
        String tableName = getTableName(uri);
        if (tableName == null) {
            throw new IllegalArgumentException("Unsupported uri " + uri);
        }

        return sqLiteDatabase.query(tableName, columns, selection, selectionArgs, groupBy, null, null);
    }

    @Nullable
    @Override
    public String getType(@NonNull Uri uri) {
        return null;
    }

    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) {
        SQLiteDatabase sqLiteDatabase = mBookHelper.getWritableDatabase();
        String tableName = getTableName(uri);
        if (tableName == null) {
            throw new IllegalArgumentException("Unsupported uri " + uri);
        }
        sqLiteDatabase.insert(tableName, null, contentValues);
        mContext.getContentResolver().notifyChange(uri, null);
        return uri;
    }

    @Override
    public int delete(@NonNull Uri uri, @Nullable String whereClause, @Nullable String[] whereArgs) {
        SQLiteDatabase sqLiteDatabase = mBookHelper.getWritableDatabase();
        String tableName = getTableName(uri);
        if (tableName == null) {
            throw new IllegalArgumentException("Unsupported uri " + uri);
        }
        int count = sqLiteDatabase.delete(tableName, whereClause, whereArgs);
        if (count > 0) {
            mContext.getContentResolver().notifyChange(uri, null);
        }
        return count;
    }

    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String whereClaus, @Nullable String[] whereArgs) {
        SQLiteDatabase sqLiteDatabase = mBookHelper.getWritableDatabase();
        String tableName = getTableName(uri);
        if (tableName == null) {
            throw new IllegalArgumentException("Unsupported uri " + uri);
        }
        int count = sqLiteDatabase.update(tableName, contentValues, whereClaus, whereArgs);
        if (count > 0) {
            mContext.getContentResolver().notifyChange(uri, null);
        }
        return count;
    }
}
  • MainActivity
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getContentResolver().registerContentObserver(BookProvider.BOOK_URI, true, observer);
        getContentResolver().registerContentObserver(BookProvider.USER_URI, true, observer);

//        insert();
//        update();
//        ((TextView) findViewById(R.id.text_view)).setText(query());
        delete();
    }

    private void insert() {
        ContentValues values = new ContentValues();
        values.put("_id", 0);
        values.put("name", "android");
        getContentResolver().insert(BookProvider.BOOK_URI, values);
    }

    private void delete() {
        getContentResolver().delete(BookProvider.BOOK_URI, "_id=?", new String[]{String.valueOf(0)});
    }

    private void update() {
        ContentValues values = new ContentValues();
        values.put("name", "ios");
        getContentResolver().update(BookProvider.BOOK_URI, values, "_id=?", new String[]{String.valueOf(0)});
    }

    private String query() {
        String result = null;
        Cursor cursor = getContentResolver().query(BookProvider.BOOK_URI, null, null, null, null);
        if (cursor != null) {
            while (cursor.moveToNext()) {
                int bookId = cursor.getInt(cursor.getColumnIndex("_id"));
                String bookName = cursor.getString(cursor.getColumnIndex("name"));

                result = "bookId = " + bookId + ", bookName = " + bookName;
            }
            cursor.close();
        }

        return result;
    }

    @Override
    protected void onDestroy() {
        getContentResolver().unregisterContentObserver(observer);

        super.onDestroy();
    }

    private ContentObserver observer = new ContentObserver(new Handler()) {
        @Override
        public boolean deliverSelfNotifications() {
            return super.deliverSelfNotifications();
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            //数据库修改数据后会回调该方法
            Toast.makeText(MainActivity.this, "data is changed", Toast.LENGTH_SHORT).show();
        }
    };
}
  • AndroidManifest.xml
//开启了一个独立进程:provider模拟使用ContentProvider跨进程通信
<provider
            android:process=":provider"
            android:permission="provider"
            android:authorities="com.vincent.provider"
            android:name=".BookProvider"/>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值