Android 数据库进阶之事务处理批量数据

今天来给大家继续分享Sqlite数据库的知识。如标题所讲,数据库批量处理数据。

首先,我们先清楚下什么是事务,是做什么用的,才能更好地去应用。

事务是数据库更新操作的基本单位,是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,可以是一条语句,也可以是批量的Sql语句。

事务回滚是指将该事务已经完成的对数据库的更新操作撤销。

在实际场景中,举个简单的例子,比如就是你在数据库升级的时候,需要更改或者移动多条数据,如果不是在一个事务的话,可能就会造成有些数据成功移动了,有些失败了,这样就给后续带来了麻烦,因为数据会混乱可能还要删除移动的数据,但是要是在一个事务的话,移动要么就都成功,要么就都失败,失败了话,就回到最初的状态,也不会出现混乱状况,失败回到最初状态,就是事务回滚了。

为什么要有事务呢?我觉得其实就是为了保证数据库逻辑操作的正确性,提高数据库处理效率,可增强用户的体验。

那么我们来看下,Android下使用事务:

1.打开数据库的事务
2.数据库的批量操作
3.设置事务的状态(true)
4.处理完成,提交数据(true则提交数据,false则数据回滚)

一般防止数据库操作出错,捕获异常,应将数据库执行语句以及db.setTransactionSuccessful()以try…catch方式执行,然后在finally语句中设置db.endTransaction();

在实际开发中,比如有上千条数据需要插入到数据库中,单独的使用for+Insert方法导致应用响应缓慢,因为 sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作,这样既效率低下,又耗费资源,而且还不能保证准确性。那么问题来了?这样的情况下,我们就用添加事务来解决,把所有数据用一个事务来处理。

db.beginTransaction();  

try{

       //批量处理操作

      数据库的操作.........

       db.setTransactionSuccessful(); 

//setTransactionSuccessfulendTransaction之间不进行任何数据库操作 

}catch(Exception e){

      log.e("",""+e.printStackTrace());

}finally{

      db.endTransaction(); 

}

使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction () 方法时会检查事务的标志是否为成功。 如果程序执行到endTransaction()之前调用了setTransactionSuccessful ()方法设置事务的标志为成功,则所有从beginTra nsaction()开始的操作都会被提交.如果没有调用setTransactionSuccessful() 方法则回滚事务。 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值