- 浏览: 192537 次
- 性别:
- 来自: 深圳
最新评论
-
0dragon:
挺多 我试试先
android 状态栏(StatusBar) -
z494627:
这个加速插件是做什么用的?
Ubuntu10.04 搭建android平台
android ContentProvider ApplyBatch
介绍:数据库事务是由一组数据库操作序列组成,事务作为一个整体被执行。
事务的原子性:包含在其中的对数据库的操作序列最终要么全部执行,要么全部不执行。当全部执行时,事务对数据库的修改将生效;当全部不执行时,数据库维持原有的状态,不会被修改。
问题:最近在做一个从sdcard导入数据到数据库的功能,当导入失败时,数据库要恢复到导入前的状态。使用数据库事务处理能很好地满足到我们的需求。
我们知道Android平台上使用的sqlite数据库是支持事务处理功能的,实现的代码如下:
view plain
SQLiteDatabase db =mOpenHelper.getWritableDatabase();
db.beginTransaction();//开始事务
//进行insertdelete update等数据库操作
db.setTransactionSuccessful();//设置事务标记为Successful
db.endTransaction();//提交事务
可是,对于已经封装成ContentProvider的Sqlite我们应该如何让其支持事务处理功能呢?
解决办法:查看ContentProvider的API说明文档,我们惊喜地发现applyBatch(String
authority,ArrayList<ContentProviderOperation>
operations)这个方法,难道只需要直接使用这个方法就可以实现事务了?
谨慎起见我们先来看看ContentProvider的源码,最后追踪到这个方法:
view plain
public ContentProviderResult[]applyBatch(ArrayList<ContentProviderOperation> operations) throwsOperationApplicationException { final int numOperations = operations.size(); final ContentProviderResult[] results = newContentProviderResult; for (int i = 0; i < numOperations; i++) {//遍历数据库操作序列 results =operations.get(i).apply(this, results, i);//执行数据库操作 } return results;//返回结果 }
从上面的代码中,我们找不到和db.beginTransaction()、db.endTransaction()相似的方法,也就是说,这个方法只是进行简单的批处理,并没有保障这些数据库操作的原子性。
好吧。我们稍微动下脑筋,覆写ContentProvider的applyBatch()方法,为其添加事务处理功能。代码如下:
view plain
@Override publicContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation>operations) throwsOperationApplicationException{ SQLiteDatabasedb = mOpenHelper.getWritableDatabase(); db.beginTransaction();//开始事务 try{ ContentProviderResult[]results = super.applyBatch(operations); db.setTransactionSuccessful();//设置事务标记为successful returnresults; }finally { db.endTransaction();//结束事务 } }
然后,我们该如何使用这个applyBatch()方法呢?applyBatch()的第一个参数实现事务的Provider的authority属性,
第二个参数是数据库操作序列,构建数据库操作的对象使用了builder设计模式,下面是一个使用applyBatch()的例子:
view plain
ArrayList<ContentProviderOperation>ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newDelete(Person.CONTENT_URI).build());//添加一个删除Person表的操作
ops.add(ContentProviderOperation.newInsert(Home.CONTENT_URI).withValues(values).build());//添加一条记录到Home表
getContentResolver().applyBatch(PROVIDER.AUTHORITY,ops);//处理事务
总结:
1、sqlite支持事务处理操作
2、对于封装成ContentProvider的sqlite数据库,我们可以通过覆写ContentProvider的
applyBatch(Stringauthority, ArrayList<ContentProviderOperation>
operations)方法来实现对事务处理的支持
发表评论
-
adb logcat
2013-09-24 09:22 0android adb 使用教程: http://www.os ... -
(转)android中如何获得webView中的内容
2013-05-02 16:43 1196本文概要:在程序中经常会用到webView来显示网页,但如果 ... -
(转)【Android】Paint的效果研究
2013-04-15 15:44 34758在Paint中有很多的属性可以设置,比如可以设置阴影, ... -
(转)Android 四种launchMode
2013-04-08 15:55 10851,standard 每次都会新建 ... -
(转)Android TextView中链接(link)点击事件的截取
2013-04-08 10:58 2161布局文件xml 1 <TextView 2 ... -
Android JNI介绍
2013-01-17 19:44 3091附:相关代码路径 /fr ... -
区分Activity的四种加载模式
2013-01-06 19:19 0在多Activity开发中,有 ... -
android Makefile学习总结
2012-12-17 12:07 0(1)build.prop是如何生成的 Android 的 ... -
Ubuntu10.04 搭建android平台
2012-12-03 13:02 1190转自:http://www.cnblogs.com/Wonde ... -
Android SDK中tools详解
2012-11-29 09:48 0Android SDK包含了各种各 ... -
在Eclipse中查看Android源码
2012-11-16 11:32 999两件事的解决办法: ... -
Android中的长度单位
2012-11-09 11:02 1000dp 和 sp px:表示屏幕实 ... -
Android自动化压力测试图解教程——Monkey工具
2012-10-31 11:10 4400有时候我们需要对一个软件进行压力测试,检查该软件的性能。如果是 ... -
Android 移动终端camera 防偷*拍设置
2012-09-28 16:14 2484目前市面上的所有移动终端几乎都有camera 应用,但A ... -
(转)【流媒體】Android 实时视频采集—Cameara预览采集
2012-09-25 13:54 146431 概述 通过Android Camera拍摄预览中设置se ... -
(转)android CAMERA 设置照片大小
2012-09-25 12:05 5171最近在 REAL210 android 上调试 CAMERA ... -
(转)Camera构架分析
2012-09-24 13:40 1613一.Camera构架分析 Android ... -
(转)Android Camera 开发之前言
2012-09-24 10:15 1748一、 Android Camera 成像原理介绍 ... -
(转)使用Memory Analyzer tool(MAT)分析内存泄漏
2012-08-09 15:14 1101前言 在平时工作 ... -
(转)Android NDK HelloJNI
2012-07-18 14:10 1589入门的最好办法就是学习Android自带的例子, 这里就通过学 ...
相关推荐
在Android系统中,ContentProvider是四大组件之一,它扮演着数据共享和访问的重要角色。ContentProvider使得应用程序可以将自己的数据结构暴露给其他应用,同时也能够访问其他应用公开的数据。本篇文章将全面解析...
1、Android Room操作SQLite数据 2、ContentProvider使用,使用Room进行数据库操作
在Android开发中,ContentProvider是一种重要的组件,它允许应用程序之间共享数据。本示例"android ContentProvider Demo"将深入探讨如何创建和使用ContentProvider来实现跨应用的数据交换。ContentProvider作为...
在Android开发中,ContentProvider是四大组件之一,它充当了数据共享的桥梁,使得不同的应用程序之间可以安全地访问和共享数据。本篇文章将详细介绍如何在Android中实现一个简单的ContentProvider。 首先,理解...
在Android开发中,ContentProvider是四大组件之一,它充当了数据共享的桥梁,使得不同的应用程序之间可以安全地访问和操作数据。本示例将详细解释如何在Android中使用ContentProvider。 1. **ContentProvider基本...
在Android系统中,ContentProvider是四大组件之一,它扮演着数据共享的角色,使得不同应用程序间可以安全地交换数据。本示例将深入讲解如何创建和使用ContentProvider。 首先,我们来理解ContentProvider的基本概念...
免费下载:android ContentProvider详细解析 讲得好详细
ContentProvider是Android系统中一种重要的组件,用于在不同应用程序间实现数据共享。它提供了一种安全的机制,允许一个应用访问另一个应用的数据,确保数据在共享过程中的安全性。ContentProvider是Android实现跨...
在Android应用开发中,ContentProvider是一个至关重要的组件,它扮演着数据共享的角色,使得不同的应用程序之间可以安全地读写共享数据。"android contentprovider的例子"这个主题将带你深入理解ContentProvider的...
Android基于ContentProvider的音乐播放器,通过读取系统多媒体信息,得到储存在外部存储器上的所有音频文件内容,用listview显示歌曲名和歌手信息.并通过mediaPlayer进行播放.该版本只是完成了一个音乐播放器的最简单...
在Android系统中,ContentProvider是实现跨应用数据共享的关键组件,它允许应用程序暴露自己的数据集,使得其他应用可以通过标准的接口进行访问。本教程将深入解析ContentProvider的使用及其源码,结合SQLite数据库...
在Android开发中,ContentProvider是四大组件之一,它扮演着数据共享的重要角色。ContentProvider使得应用程序之间能够安全、有序地访问彼此的数据,无论是系统内置的数据(如联系人、日历等)还是自定义的数据存储...
Android学习ContentProvider数据更新与Observer模式一Observer模式意图: 定义对象之间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被更新。 依赖(Dependents)、发布-...
在Android系统中,ContentProvider是一种核心组件,它允许应用程序之间共享数据,而无需直接访问对方的内部存储。在本教程中,我们将深入探讨如何利用ContentProvider来操作文件,以及其在跨应用数据传输中的作用。 ...
在Android开发中,ContentProvider是一种核心组件,它允许应用程序间共享数据。ContentProvider构建于Android的URI机制之上,为其他应用提供了结构化的数据访问接口。本篇将详细讲解如何自定义ContentProvider,以及...
在Android应用开发中,ContentProvider是一个非常重要的组件,它扮演着数据共享和访问的角色。ContentProvider使得不同应用程序之间可以安全地共享数据,就像数据库一样,但又超越了数据库的范畴,因为它提供了统一...
"Android Intent 和 ContentProvider" Android Intent 是 Android 组件之间的信使,负责在 Android 三大核心组件(Activity、Service、Broadcast Receiver)之间传递信息。Intent 是一个将要执行的动作的抽象描述...
在Android开发中,ContentProvider是Android四大组件之一,它的主要职责是实现应用程序间的数据共享。ContentProvider通过统一的接口让其他应用能够访问和修改特定的数据集,这些数据可能存储在SQLite数据库、文件...
Android contentprovider总结
在Android开发中,ContentProvider是四大组件之一,它充当了一个数据共享的桥梁,使得不同的应用程序之间可以安全地访问和操作数据。本篇文章将深入探讨如何使用ContentProvider进行数据库的增删改查操作,并结合...