深入Android SQLite 事务处理详解

作者:计算机教程

复制代码 代码如下:

应用程序初始化时需要批量的向sqlite中插入大量数据,单独的使用for Insert方法导致应用响应缓慢,因为 sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。我的应用初始5000条记录也就是要5000次读写磁盘操作。

 public void payment() {
  SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
  db.beginTransaction();//开始事务
  try {
   db.execSQL("update person set amount=amount-10 where personid=2");
   db.execSQL("update person set amount=amount 10 where personid=5");
   db.setTransactionSuccessful();// 设置事务的标志为true,调用此方法会在执行到endTransaction()方法是提交事务,若没有调用此方法会在执行到endTransaction()方法回滚事务。
  } catch (SQLException e) {
  } finally {
   db.endTransaction();
  }
  // 结束事务,有两种情况:commit,rollback,
  // 事务的提交或回滚是由事务的标志决定的,如果事务的标志为true就会提交,否则回滚,默认情况下事务的标志为false
 } 

而且不能保证所有数据都能同时插入。(有可能部分插入成功,另外一部分失败,后续还得删除。太麻烦)

PS:类似转账功能,两个操作在同一个事务中完成。

解决方法:

您可能感兴趣的文章:

添加事务处理,把5000条插入作为一个事务

我们使用SQLite的事务进行控制:

复制代码 代码如下:

        db.beginTransaction();  //手动设置开始事务

        try{

            //批量处理操作

            for(Collection c:colls){

                insert(db, c);

            }

            db.setTransactionSuccessful(); //设置事务处理成功,不设置会自动回滚不提交。

本文由nba买球发布,转载请注明来源

关键词: