Android 创建一个私有的数据库(内容提供者)

public class MyOpenHelper extends SQLiteOpenHelper {

    /**
     *
     * @param context
     * @param name  数据库的名字
     * @param factory   游标工厂
     * @param version   版本
     */
    public MyOpenHelper(Context context) {
        super(context, "Account.db", null, 1);
    }
    // 表结构的初始化
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table info(_id integer primary key autoincrement, name varchar(20), money varchar(20))");
        db.execSQL("insert into info(name, money) values(?, ?)", new String[] {"张三", "5000"});
        db.execSQL("insert into info(name, money) values(?, ?)", new String[] {"李四", "3000"});
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

public class AccountProvider extends ContentProvider {

    //1 定义一个urimacher 定义路径匹配器
    private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    private static final int QUERYSUCCESS = 0; // 大小写转换 ctrl + shift + u
    private static final int INSERTSUCCESS = 1;
    private static final int UPDATESUCCESS = 2;
    private static final int DELETESUCCESS = 3;
    private MyOpenHelper myOpenHelper;

    //2 定义静态代码块 添加匹配规则
    static {
        /**
         * authority 注意 这个参数和你在清单文件里面定义的要一样
         * URL http://baidu.com
         * uri content://com.itheima.provider/query
         *     content://com.itheima.provider/insert
         *     content://com.itheima.provider/update
         *     content://com.itheima.provider/delete
         */
        sURIMatcher.addURI("com.itheima.provider", "query", QUERYSUCCESS);
        sURIMatcher.addURI("com.itheima.provider", "insert", INSERTSUCCESS);
        sURIMatcher.addURI("com.itheima.provider", "update", UPDATESUCCESS );
        sURIMatcher.addURI("com.itheima.provider", "delete", DELETESUCCESS);
    }



    public AccountProvider() {
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        // Implement this to handle requests to delete one or more rows.
        int match = sURIMatcher.match(uri);
        if (match == DELETESUCCESS) {
            // 说明路径匹配成功 对数据库进行删除的操作
            SQLiteDatabase db = myOpenHelper.getReadableDatabase();
            // 代表影响的函数 clause:子句
            int delete = db.delete("info", selection, selectionArgs);
            db.close(); // 关闭数据库
            if (delete > 0) {
                // 发送一条消息 说明数据库发生了改变
                getContext().getContentResolver().notifyChange(uri, null);
            }
            return delete;
        } else {
            // 路径不匹配
            throw new IllegalArgumentException("您的路径不匹配,请检查路径");
        }
    }

    @Override
    public String getType(Uri uri) {
        // TODO: Implement this to handle requests for the MIME type of the data
        // at the given URI.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        // TODO: Implement this to handle requests to insert a new row.
        int code = sURIMatcher.match(uri);
        if (code == INSERTSUCCESS) {
            // 操作数据库 说明路径匹配成功
            SQLiteDatabase db = myOpenHelper.getReadableDatabase();
            // 返回值代表新插入行数的id
            long insert = db.insert("info", null, values);
            db.close(); // 关闭数据库
            if (insert > 0) {
                // 发送一条消息 说明数据库发生了改变
                getContext().getContentResolver().notifyChange(uri, null);
            }

            Uri uri2 = uri.parse("com.itheima.insert/" + insert);
            return uri2;
        } else {
            // 路径不匹配
            throw new IllegalArgumentException("您的路径不匹配,请检查路径");
        }
    }

    @Override
    public boolean onCreate() {
        // TODO: Implement this to initialize your content provider on startup.
        myOpenHelper = new MyOpenHelper(getContext());
        return false;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
                        String[] selectionArgs, String sortOrder) {
        // TODO: Implement this to handle query requests from clients.
        int code = sURIMatcher.match(uri);
        if (code == QUERYSUCCESS) {
            // 说明路径匹配成功 把query方法给实现 数据库的查询方法,对数据库进行查询的操作,想操作数据库必须得获得sqlitedatabase对象
            SQLiteDatabase db = myOpenHelper.getReadableDatabase();
            Cursor cursor = db.query("info", projection, selection, selectionArgs, null, null, sortOrder);
            // cursor 不能关闭 注意
            // 数据库被人操作了 自己发送一条消息
            getContext().getContentResolver().notifyChange(uri, null);
            return cursor;
        } else {
            // 路径不匹配
            throw new IllegalArgumentException("路径不匹配,请检查路径");
        }
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
                      String[] selectionArgs) {
        // TODO: Implement this to handle requests to update one or more rows.
        int code = sURIMatcher.match(uri);
        if (code == UPDATESUCCESS) {
            SQLiteDatabase db = myOpenHelper.getReadableDatabase();
            // 影响的行数
            int update = db.update("info", values, selection, selectionArgs);
            db.close(); // 关闭数据库
            if (update > 0) {
                // 发送一条消息 说明数据库发生了改变
                getContext().getContentResolver().notifyChange(uri, null);
            }
            return update;
        } else {
            // 路径不匹配
            throw new  IllegalArgumentException("你的路径不匹配,请检查路径");
        }
    }
}

        <provider
            android:name=".AccountProvider"
            android:authorities="com.itheima.provider"  <!--在AndroidStudio中 创建内容提供者文件直接在创建时声明authorities-->
            android:enabled="true"
            android:exported="true"></provider>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值