首页 理论教育 SQLite事务详解

SQLite事务详解

时间:2023-06-17 理论教育 版权反馈
【摘要】:假如B账户的钱没有增加,但是A账户已经扣了100元,这样显然是不可以的,所以要把A的100元返还给A,就是恢复原样。而这里使用finally块是为了避免某个语句执行发生错误,导致程序的意外停止,后面结束事务的操作没执行。另外,前面已介绍在data/data/<包名>/database/目录下除了有用户创建的db文件外,还有一个是用来让数据库支持事务而产生的临时的日志文件×××.db-journal。

SQLite事务详解

我们都知道数据库是面向多个用户的,如果每个时刻只有一名用户在操作数据库,其他用户需要等待,这很影响数据库资源的使用,而多个人并发访问又容易发生问题,比如A用户查询某种表时并没有找到X项。而在该用户还没完成操作之前,另一个用户插入了X项而A依旧认为没有X项。

举个形象的例子,A给B转100元,那么A的存储要减少100元,B的存款也增加100元,两个条件要同时满足才能完成交易(提交事务)。假如B账户的钱没有增加,但是A账户已经扣了100元,这样显然是不可以的,所以要把A的100元返还给A,就是恢复原样(事务回滚)。

概括来说就是两个或多个操作捆绑到一起的操作,只有所有操作都执行了,事务才算执行完毕,才提交如果有一个操作没有执行的话,那么事务就会回滚,计算恢复原形,之前做的都会撤销。

简单例子:用户1给用户2转账10元。

相法方法介绍:(www.xing528.com)

beginTransaction(): 开启画务

endTransaction(): 结束事务

结束事务的结果有两种,事务回滚或者提交,而决定回滚还是提交决定于一个标记,默认为false,即回滚;所以想提交的话需要调setTransactionSuccessful()设置为true。而这里使用finally块是为了避免某个语句执行发生错误,导致程序的意外停止,后面结束事务的操作没执行。

简单点说就是,写在事务里的所有数据库操作都成功,事务提交,否则,事务回滚,就是回到前面的状态——未执行数据库操作的时候。另外,前面已介绍在data/data/<包名>/database/目录下除了有用户创建的db文件外,还有一个是用来让数据库支持事务而产生的临时的日志文件×××.db-journal。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈