今天来给大家继续分享Sqlite数据库的知识。如标题所讲,数据库批量处理数据。
首先,我们先清楚下什么是事务,是做什么用的,才能更好地去应用。
事务是数据库更新操作的基本单位,是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,可以是一条语句,也可以是批量的Sql语句。
事务回滚是指将该事务已经完成的对数据库的更新操作撤销。
在实际场景中,举个简单的例子,比如就是你在数据库升级的时候,需要更改或者移动多条数据,如果不是在一个事务的话,可能就会造成有些数据成功移动了,有些失败了,这样就给后续带来了麻烦,因为数据会混乱可能还要删除移动的数据,但是要是在一个事务的话,移动要么就都成功,要么就都失败,失败了话,就回到最初的状态,也不会出现混乱状况,失败回到最初状态,就是事务回滚了。
为什么要有事务呢?我觉得其实就是为了保证数据库逻辑操作的正确性,提高数据库处理效率,可增强用户的体验。
那么我们来看下,Android下使用事务:
1.打开数据库的事务
2.数据库的批量操作
3.设置事务的状态(true)
4.处理完成,提交数据(true则提交数据,false则数据回滚)
一般防止数据库操作出错,捕获异常,应将数据库执行语句以及db.setTransactionSuccessful
在实际开发中,比如有上千条数据需要插入到数据库中,单独的使用for+Insert方法导致应用响应缓慢,因为 sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作,这样既效率低下,又耗费资源,而且还不能保证准确性。那么问题来了?这样的情况下,我们就用添加事务来解决,把所有数据用一个事务来处理。
db.beginTransaction();
try{
//批量处理操作
数据库的操作.........
db.setTransactionSuccessful();
//在setTransactionSuccessful和endTransaction之间不进行任何数据库操作
}catch(Exception e){
log.e("",""+e.printStackTrace());
}finally{
db.endTransaction();
}
使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction () 方法时会检查事务的标志是否为成功。 如果程序执行到endTransaction()之前调用了setTransactionSuccessful