Android 创建一个私有的数据库(内容提供者)
2017-04-28 21:11
363 查看
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>
相关文章推荐
- Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容
- 关于Android sqlite3数据库创建使用内容提供者contentProvider及解析者ContentResolver,观察者ContentResolver案例
- 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建
- 创建一个内容提供者Creating a Content Provider——翻译总结自developer.android.com
- 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)
- 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建
- 【Android Developers Training】 94. 创建一个空内容提供器(Content Provider)
- 使用内容提供者ContentProvider与内容访问者ContentResolver实现拿到另外一个项目的数据库数据
- Android-创建一个简单的用户接口-(补day2内容)
- Android 内容提供者 一个查询内容小demo
- Google Android开发者文档系列-创建有内容分享特性的应用之添加一个简单的共享action
- Android内容提供者(二)创建自己的Provider
- Android -- ContentProvider 内容提供者,创建和调用
- Android开发之内容提供者——创建自己的ContentProvider(详解)
- Android -- ContentProvider 内容提供者,创建和调用
- ADO 实例《创建一个临时数据库 创建一个临时数据表 GridView1绑定内容 以及Dataset_的使用》
- android基础之内容提供者创建
- Android数据库和内容提供者ContentProvider
- Android开发之内容提供者——创建自己的ContentProvider(详解)
- Android Content Provider Tutorial--安卓内容提供者系列4--如何创建内容提供者