Android SQLite数据库—事务

本章节讲述Android sqlite原生数据库 事务知识


1.sqlite事务简介

  关于SQLite事务可以解决一些问题,比如你要插入两个数据,可以将两个数据作为同一个事务进行插入,这样如果第二个数据错误了,便自动执行回滚操作,第一个数据也不会插入成功,保证了数据的同步!


2.举例

A转给B100块钱,那么A的存储要减去100,B的存储也要增加100,两个条件要同时满足才能完成交易(提交事务),但是假如B账户
的钱没有增加,而A已经扣了100快,这样显然是不可以的。所以要把A的100快返回给他,就是回复原样(事务回滚)。总的来说就是两个或多个操作绑定到一起的操作,只有所有操作都执行了,事务才算执行完毕,才提交。如果有一个操作没有执行的话,那么事务就会回滚,就是恢复原型,之前做的操作都会销毁。


3.解决方法

Android SQLite数据库—事务

Android SQLite数据库—事务


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


5.说明2:

使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。事务处理应用:很多时候我们需要批量的向Sqlite中插入大量数据时,单独的使用添加方法导致应用响应缓慢, 因为sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。如初始8000条记录也就是要8000次读写磁盘操作。同时也是为了保证数据的一致性,避免出现数据缺失等情况。



SQLiteDatabase db = dbOpenHelper.getWritableDatabase();

//开启事务

db.beginTransaction();

try{

            //批量处理操作

            //do something

           db.execSQL("SQL语句", new Object[]{});

           db.execSQL("SQL语句", new Object[]{});

            //设置事务标志为成功,当结束事务时就会提交事务

            db.setTransactionSuccessful();

}

catch(Exception e){

 

}

 

finally{

           //结束事务

          db.endTransaction();

}


6.SQLite存储大二进制文件

一般我们很少往数据库中存储大二进制文件,比如图片,音频,视频等,对于这些我们一般 是存储文件路径,但如果右这样的需求,下面我们以 图片为例子,将图片保存到SQLite中,以及读取SQLite中的图片!


Android SQLite数据库—事务