Android Sqlite 之事务
2016-01-20 09:23
288 查看
一.概述
首先给大家普及一下知识,什么是事务:事务,一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元。
简单的说吧,事务就是对数据库所进行的一次操作。
二.Sqlite中的事务
首先要知道Sqlite中为什么要使用事务:假如我们需要批量的向sqlite中插入大量数据,单独的使用for+Insert方法会导致应用响应缓慢,因为 sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。我的应用初始5000条记录也就是要5000次读写磁盘操作。而且不能保证所有数据都能同时插入。(有可能部分插入成功,另外一部分失败,后续还得删除。太麻烦)
解决方法:
添加事务处理,把5000条插入作为一个事务
代码如下:
[code] db.beginTransaction(); // 手动设置开始事务 try { // 批量处理操作 for (Collection c : colls) { insert(db, c); } db.setTransactionSuccessful(); // 设置事务处理成功,不设置会自动回滚不提交。 // 在setTransactionSuccessful和endTransaction之间不要进行任何数据库操作 } catch (Exception e) { e.printStackTrace(); } finally { db.endTransaction(); // 处理完成 }
使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功,则所有从beginTransaction()开始的操作都会被提交,如果没有调用setTransactionSuccessful() 方法则回滚事务。
三.例子
下面两条SQL语句在一个事务中进行[code]public void payment() { SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); //开启事务 db.beginTransaction(); try { db.execSQL("update person set amount=amount-10 where personid=?", new Object[]{1}); db.execSQL("update person set amount=amount+10 where personid=?", new Object[]{2}); //设置事务标志为成功,当结束事务时就会提交事务 db.setTransactionSuccessful(); } catch(Exception e){ throw(e); } finally { //结束事务 db.endTransaction(); } }
相关文章推荐
- 推荐提升 Android 性能的建议
- Android01_环境搭建和HelloWorld
- Android:解决client从server上获取数据乱码的方法
- 使用Qark寻找与 Android 应用相关的安全漏洞
- 主activity与其启动的service的关系
- 推荐几款实用的Android Studio 插件
- 推荐提升 Android 性能的建议
- Android Sqlite 之 getWritableDatabase()和getReadableDatabase()区别
- 《Android源码设计模式解析与实战》读书笔记(二十三)
- Android自助餐之插件化(使用Small框架)
- Android插件实例——360 DroidPlugin详解
- 在 Android* 商务应用中实施地图和地理围栏特性
- 美团Android资源混淆保护实践
- Mac版本Android SDK无法更新问题解决
- Android流式布局实现
- Android targetSdkVersion 原理
- Android asynctask使用
- 在AS中gradle多渠道打包应用
- Android 基本开发流程
- Android 中 SQLite 数据库的查看