使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。使用例子如下:

public void testTransaction() {PersonSQLiteOpenHelper openHelper = new PersonSQLiteOpenHelper(getContext());SQLiteDatabase db = openHelper.getWritableDatabase();if(db.isOpen()) {try {// 开启事务db.beginTransaction();// 1. 从张三账户中扣1000块钱db.execSQL("update person set balance = balance - 1000 where name = 'zhangsan';");// ATM机, 挂掉了.// int result = 10 / 0;// 2. 向李四账户中加1000块钱db.execSQL("update person set balance = balance + 1000 where name = 'lisi';");// 标记事务成功db.setTransactionSuccessful();} finally {// 停止事务db.endTransaction();}db.close();}}public void testTransactionInsert() {PersonSQLiteOpenHelper openHelper = new PersonSQLiteOpenHelper(getContext());SQLiteDatabase db = openHelper.getWritableDatabase();if(db.isOpen()) {// 1. 记住当前的时间long start = System.currentTimeMillis();// 2. 开始添加数据try {db.beginTransaction();for (int i = 0; i < 10000; i++) {db.execSQL("insert into person(name, age, balance) values('wang" + i + "', " + (10 + i) + ", " + (10000 + i) + ")");}db.setTransactionSuccessful();} finally {db.endTransaction();}// 3. 记住结束时间, 计算耗时时间long end = System.currentTimeMillis();long diff = end - start;Log.i(TAG, "耗时: " + diff + "毫秒");db.close();}}}


更多相关文章

  1. Android(安卓)自定义View 性能分析学习
  2. Android数据库设计
  3. android_sqlite
  4. [Android(安卓)Pro] AES加密
  5. [导入]2010-03-02 传智播客—Android(四)数据存储之四ContentProvi
  6. android SQLite 优化(三)使用事务 优化 insert
  7. android之碎片fragment的使用
  8. [Android]Fragment的应用/点击替换fragment应用实例
  9. 【Android(安卓)开发教程】在服务中执行耗时操作

随机推荐

  1. Android(安卓)UI—仿微信底部导航栏布局
  2. 67-Flutter中高德地图插件的使用
  3. Macaca安装配置流程
  4. [Android学UI之三]实现新浪微博消息页面
  5. Android开发之如何在App间安全地共享文件
  6. Android(安卓)ExpandableListView简单使
  7. android 自定义View绘制电池电量(电池内带
  8. android代码中打开系统设置界面 .
  9. Android(安卓)学习笔记之界面布局
  10. Android第四讲——常用的基本控件(三)Toa