今天补充关于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. }
修改数据库的几种可能:
· 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. }
发表评论
-
startActivityForResult 简介
2011-03-29 15:55 1284依次打开Activity A1--A2--A3--A4 这时 ... -
startActivityForResult
2011-03-29 15:49 1146startActivityForResult 方法-- ... -
史上最全的Android的Tab与TabHost讲解
2011-03-28 11:22 1591Tab与TabHost 这就是Tab,而盛放Tab的 ... -
Android对话框
2011-03-25 11:21 1125Android 对话框(Dialog)大全 ... -
PreferenceActivity详解
2011-03-25 11:15 1442为了引入这个概率 首先从需求说起 即:现有某Activity专 ... -
TCP/UDP/HTTP
2011-03-25 11:09 1125先来一个讲TCP、UDP和HTTP ... -
9png
2011-03-25 11:08 1914今天学习了用9png图来优化横屏竖屏的UI,使用sdk自带的工 ... -
Notification
2011-03-25 11:07 939Android系统的状态栏(Status Bar)中有一个创新 ... -
一些技巧
2011-03-25 11:03 7861:查看是否有存储卡插入 String status=Envi ... -
布局像素单位
2011-03-25 11:03 826Android的layout文件中有时候可能会指定具体的单位, ... -
使用ActivityGroup来切换Activity和Layout
2011-03-25 11:02 1134在一个主界面中做Activity切换一般都会用TabActiv ... -
activitygroup
2011-03-25 11:01 1730说说tabhost和activitygroup 最近 ... -
线程
2011-03-25 11:01 1013今天在论坛上看到一些关于线程的帖子,我觉得与我理解的有些差异, ... -
类级框架
2011-03-25 11:00 744类集框架:Collection,Map,Iterator,En ... -
Intent打电话
2011-03-25 11:00 1217intent英文意思是意图,pending表示即将发生或来临的 ... -
Intent Uri
2011-03-25 10:59 1068进入联系人页面 1.Intent intent = new I ... -
Service
2011-03-25 10:59 939一、Service的概念 Service是Android程序中 ... -
Broadcast Receiver
2011-03-25 10:56 1947一、Broadcast Receiver简介 Android中 ... -
ContentProvider MIME类型
2011-03-25 10:55 1237Android程序的主要4部分 ... -
ContentProvider-1查询
2011-03-25 10:55 1236今天看了android的官方文档中ContentProvide ...
相关推荐
- ContentProvider的结构:ContentProvider由一系列的类方法组成,包括`query()`, `insert()`, `update()`, `delete()`和`getType()`,分别对应数据的查询、插入、更新、删除和获取数据类型的操作。 - URI(统一...
1. **继承自ContentProvider的自定义类**:这是ContentProvider的核心,你需要在这个类中实现各种操作数据的方法,如insert、delete、update和query。 2. **UriMatcher**:这是一个工具类,用于匹配不同的URI,根据...
- **实现ContentProvider子类**:继承`ContentProvider`类,并实现抽象方法,如`insert()`, `delete()`, `update()`, `query()`和`getType()`。 - **调用ContentProvider**:通过`ContentResolver`对象与...
filecraft-contentprovider-介绍FileCraft ContentProvider 示例 Android 应用程序。 在 Google Play 商店中与 FileCraft 一起使用。 这是示例插件应用程序的早期版本。 随着我更多地测试和使用它,事情可能会发生...
#### 2. android.os - **概述**:`android.os`包提供了丰富的系统服务、消息传输以及进程间通信(IPC)的功能。它是Android框架层的重要组成部分。 - **关键类**: - `Handler`:用于发送和处理消息。 - `Looper`...
该项目的目标是为 iQser GIN 语义中间件 ( ) 的 CSV 文件提供 ContentProvider 插件。 iQser GIN(全球信息网络)平台是一个企业级、高度可扩展的语义中间件,其功能包括数据集成、分析、过程控制和信息检索,包括...
一个ContentProvider类 SQLiteOpenHelper类 每个实体一个Columns类 每个实体一个Cursor类 每个实体一个ContentValues类 每个实体一个Selection类 每个实体一个Model接口 每个实体一个Bean类(可选) 用法 有两种可能...
2. **Java编程语言**: Java是该项目的主要编程语言,它的跨平台特性使得应用能够在多种Android设备上运行。Java语法清晰,且支持面向对象编程,适合构建复杂的业务逻辑。 3. **Android Studio**: 作为Google官方...
`ContentProvider-Demo`是一个示例项目,用于演示如何创建和使用ContentProvider。在这个项目中,我们将深入理解ContentProvider的工作原理、其重要性以及如何在实际应用中实现。 ContentProvider是Android四大组件...
在Android开发中,ContentProvider是系统提供的一种数据共享机制,它可以跨应用地访问和操作数据。而`AsyncQueryHandler`是Android系统提供的一个辅助类,用于在ContentProvider中执行异步查询操作,避免阻塞主线程...
2. 创建一个继承自ContentProvider的类,并重写其中的关键方法: - onCreate():当ContentProvider被首次请求时调用,用于初始化。 - query():处理数据查询请求,返回Cursor对象。 - insert():处理数据插入请求...
2. **布局与视图** - XML布局:如何创建和管理布局文件 - View和ViewGroup:Android UI的基本元素,理解它们之间的关系 - 自定义View:如何扩展系统提供的View类以满足特定需求 3. **数据存储** - ...
- Android应用程序架构:了解Activity、Service、BroadcastReceiver、ContentProvider等组件的用途与交互。 - Layouts和View:熟悉LinearLayout、RelativeLayout、ConstraintLayout等布局管理器,理解自定义View的...
Android开发实战经典_030804_ContentProvider_A_ContentProvider简介视频教程.zip
- 创建ContentProvider类:继承自ContentProvider类,并实现其关键方法,如query(), insert(), update(), delete()等。 - 注册Content Provider:在AndroidManifest.xml文件中声明Content Provider,指定它的权威URI...
- ContentProvider:提供了一种安全的数据共享机制,使得应用间可以互相访问数据。 - Service:在后台运行的任务,不会显示任何用户界面。 ### UI组件 - **View类族介绍:** - `View`:是所有用户界面元素的...
提供数据端主要是指ContentProvider的实现部分,通过上述的query、insert、update和delete方法来处理数据操作。例如,如果你的数据存储在SQLite数据库中,这些方法通常会与SQL语句结合,完成对数据库的操作。 四、...
- 使用 `insert()`、`delete()`、`update()` 和 `query()` 方法对内容提供者进行操作。 #### 五、网络存储 通过网络协议(如 HTTP、FTP)实现数据的远程存储和传输。 - **HTTP/FTP**: - 可以使用 `...
2. **组件应用**: - Service:了解Service的启动方式、生命周期,以及如何在Service中执行长时间任务。 - BroadcastReceiver:学习BroadcastReceiver的注册方式,以及如何处理系统广播事件。 - ContentProvider...