`
trygood
  • 浏览: 79123 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ContentProvider-2modify data:insert,update,delete

阅读更多
今天补充关于modify data的内容,Google的官方文档上是这样讲的:
修改数据库的几种可能:
·         Adding new records
·         Adding new values to existing records
·         Batch updating existing records(批量更新现有记录)
·         Deleting records
所有的修改操作都经由ContentResolver来进行,有些数据库对写操作比较严格,需要使用permission,例如我下面使用到的
<uses-permission android:name = "android.permission.WRITE_CONTACTS" />凡是对contact进行写操作,那就必须加这个。
 
其实我总结起来就是insert和update就需要准备好ContentValues和ContentResolver,ContentValues把数据put好,然后开ContentResolver执行insert或update就好啦。批量更新我没看出有什么特别的,不确定文档的意思是说可以有方法去批量更新还是自己要查出来,然后一条条去更新。
 
文档上对openOutputStream和openInputStream废话了很久还写了一个小例子,这个我没有做实验,可能要等我的provider写出来再实验
 
以下是我写得insert, update,和delete三个动作:
Insert:这里面比较特别的是People.Phones.CONTENT_DIRECTORY的用法,具体怎么这样就能插入数据应该是因为provider中有针对这种格式的处理,因为我把这几个Uri打印出来看了,插入people表后,返回的uri是:content://contacts/people/7,而拼接后的Uri是:content://contacts/people/7/phones,但插入phones成功后返回的uri是:content://contacts/phones/5,所以这其中如何跳转的,我觉得provider有做特别的处理。


view plaincopy to clipboardprint?
1. private void insert() {  
2.         ContentValues cvalues = new ContentValues();  
3.         cvalues.put(PeopleColumns.NAME, "Liu,Xiaohua");  
4.         cvalues.put(PeopleColumns.TIMES_CONTACTED, 5);  
5.         Uri uri = getContentResolver().insert(People.CONTENT_URI, cvalues);  
6.         Log.i("lily","Insert succeed!");  
7.         Log.i("lily","uri = " + uri);  
8.         Uri phoneuri = Uri.withAppendedPath(uri, People.Phones.CONTENT_DIRECTORY);  
9.         Log.i("lily","phoneuri = " + phoneuri);  
10.         cvalues.clear();  
11.         cvalues.put(People.Phones.NUMBER, "110");  
12.         cvalues.put(People.Phones.TYPE, People.Phones.TYPE_MOBILE);  
13.         Uri resulturi = getContentResolver().insert(phoneuri, cvalues);  
14.         Log.i("lily","resulturi = "+resulturi);  
15.     }  
 
Update:我将name=Liu,Xiaohua的数据的phone number进行了更新,这里查询时Liu,Xiaohua要加‘’单引号,不然会报错


view plaincopy to clipboardprint?
1. private void update() {  
2.         ContentResolver cr = getContentResolver();  
3.         String[] projection = {People._ID, People.PRIMARY_PHONE_ID};  
4.         Cursor cursor = cr.query(People.CONTENT_URI, projection, PeopleColumns.NAME + " = 'Liu,Xiaohua'", null, null);  
5.         if (cursor.moveToFirst()){  
6.             int id = cursor.getInt(cursor.getColumnIndex(People.PRIMARY_PHONE_ID));  
7.             ContentValues updateValues = new ContentValues();  
8.             updateValues.put(People.Phones.NUMBER, "114");  
9.             Uri updateUri = ContentUris.withAppendedId(Phones.CONTENT_URI, id);  
10.               
11.             Log.i("lily","updateUri = "+updateUri);  
12.             cr.update(updateUri, updateValues, null, null);  
13.         }  
14.         else{  
15.             Log.i("lily","not found \"Liu,Xiaohua\"");  
16.         }  
17.         cursor.close();  
18.     }  
 
delete:将我之前折腾的Liu,Xiaohua数据给删掉。每次操作的结果都可以去contact这个AP去看


view plaincopy to clipboardprint?
1. private void delete() {  
2.         int row = getContentResolver().delete(People.CONTENT_URI, People.NAME + " = 'Liu,Xiaohua'", null);  
3.         Log.i("lily","deleted " + row + " rows.");  
4.     }  

分享到:
评论

相关推荐

    contentprovider--读取写入联系人数据

    - ContentProvider的结构:ContentProvider由一系列的类方法组成,包括`query()`, `insert()`, `update()`, `delete()`和`getType()`,分别对应数据的查询、插入、更新、删除和获取数据类型的操作。 - URI(统一...

    ContentProvider--Demo

    1. **继承自ContentProvider的自定义类**:这是ContentProvider的核心,你需要在这个类中实现各种操作数据的方法,如insert、delete、update和query。 2. **UriMatcher**:这是一个工具类,用于匹配不同的URI,根据...

    关于android的数据存储-SQLite-ContentProvider-preferences

    - **实现ContentProvider子类**:继承`ContentProvider`类,并实现抽象方法,如`insert()`, `delete()`, `update()`, `query()`和`getType()`。 - **调用ContentProvider**:通过`ContentResolver`对象与...

    filecraft-contentprovider-intro:FileCraft ContentProvider 示例应用程序

    filecraft-contentprovider-介绍FileCraft ContentProvider 示例 Android 应用程序。 在 Google Play 商店中与 FileCraft 一起使用。 这是示例插件应用程序的早期版本。 随着我更多地测试和使用它,事情可能会发生...

    Android类库介绍

    #### 2. android.os - **概述**:`android.os`包提供了丰富的系统服务、消息传输以及进程间通信(IPC)的功能。它是Android框架层的重要组成部分。 - **关键类**: - `Handler`:用于发送和处理消息。 - `Looper`...

    gin2-contentprovider-csv:iQser GIN v2 CSV Contentprovider

    该项目的目标是为 iQser GIN 语义中间件 ( ) 的 CSV 文件提供 ContentProvider 插件。 iQser GIN(全球信息网络)平台是一个企业级、高度可扩展的语义中间件,其功能包括数据集成、分析、过程控制和信息检索,包括...

    java投屏源码-android-contentprovider-generator:一个生成AndroidContentProviders的

    一个ContentProvider类 SQLiteOpenHelper类 每个实体一个Columns类 每个实体一个Cursor类 每个实体一个ContentValues类 每个实体一个Selection类 每个实体一个Model接口 每个实体一个Bean类(可选) 用法 有两种可能...

    song-dapei-aphone:穿衣搭配Android手机项目

    2. **Java编程语言**: Java是该项目的主要编程语言,它的跨平台特性使得应用能够在多种Android设备上运行。Java语法清晰,且支持面向对象编程,适合构建复杂的业务逻辑。 3. **Android Studio**: 作为Google官方...

    ContentProvider-Demo:内容提供者的Demo

    `ContentProvider-Demo`是一个示例项目,用于演示如何创建和使用ContentProvider。在这个项目中,我们将深入理解ContentProvider的工作原理、其重要性以及如何在实际应用中实现。 ContentProvider是Android四大组件...

    contentprovider异步查询帮助类:AsyncQueryHandler

    在Android开发中,ContentProvider是系统提供的一种数据共享机制,它可以跨应用地访问和操作数据。而`AsyncQueryHandler`是Android系统提供的一个辅助类,用于在ContentProvider中执行异步查询操作,避免阻塞主线程...

    contentprovider

    2. 创建一个继承自ContentProvider的类,并重写其中的关键方法: - onCreate():当ContentProvider被首次请求时调用,用于初始化。 - query():处理数据查询请求,返回Cursor对象。 - insert():处理数据插入请求...

    Android Java面试题

    2. **布局与视图** - XML布局:如何创建和管理布局文件 - View和ViewGroup:Android UI的基本元素,理解它们之间的关系 - 自定义View:如何扩展系统提供的View类以满足特定需求 3. **数据存储** - ...

    android面试题

    - Android应用程序架构:了解Activity、Service、BroadcastReceiver、ContentProvider等组件的用途与交互。 - Layouts和View:熟悉LinearLayout、RelativeLayout、ConstraintLayout等布局管理器,理解自定义View的...

    Android开发实战经典-030804-ContentProvider-A-ContentProvider简介视频教程.zip

    Android开发实战经典_030804_ContentProvider_A_ContentProvider简介视频教程.zip

    Android基础 Content Provider

    - 创建ContentProvider类:继承自ContentProvider类,并实现其关键方法,如query(), insert(), update(), delete()等。 - 注册Content Provider:在AndroidManifest.xml文件中声明Content Provider,指定它的权威URI...

    Android面试资料

    - ContentProvider:提供了一种安全的数据共享机制,使得应用间可以互相访问数据。 - Service:在后台运行的任务,不会显示任何用户界面。 ### UI组件 - **View类族介绍:** - `View`:是所有用户界面元素的...

    自定义ContentProvider实例

    提供数据端主要是指ContentProvider的实现部分,通过上述的query、insert、update和delete方法来处理数据操作。例如,如果你的数据存储在SQLite数据库中,这些方法通常会与SQL语句结合,完成对数据库的操作。 四、...

    Android总结

    - 使用 `insert()`、`delete()`、`update()` 和 `query()` 方法对内容提供者进行操作。 #### 五、网络存储 通过网络协议(如 HTTP、FTP)实现数据的远程存储和传输。 - **HTTP/FTP**: - 可以使用 `...

    2019Android面试 常见58题.zip

    2. **组件应用**: - Service:了解Service的启动方式、生命周期,以及如何在Service中执行长时间任务。 - BroadcastReceiver:学习BroadcastReceiver的注册方式,以及如何处理系统广播事件。 - ContentProvider...

Global site tag (gtag.js) - Google Analytics