事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
一个浅显的例子,例如银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行。不能说如果执行完一个账号的扣款之后,突然停电了,另外一个账号没有进行增款操作。
类似这样的情况,我们都应该把它们看成一个事务。事务是数据库维护数据一致性的单位,并且在每个事务结束时,都能保持数据一致性。
事务应该遵循ACID特征,即:
- Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。
- Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。
- Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
- Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。
在Sqlite中我们采用如下三段来处理事务:
- db.beginTransaction()
- setTransactionSuccessful()
- db.endTransaction()
参考代码如下(lisi向zhangsan打钱1000块的例子)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
其中的str.equals(“123″);语句会出现空指针错误。这里可以用于模拟程序异常中断,并且查看结果我们发现不会出现sql语句只执行一部分的情况。
搬运自本人博客,xge技术博客:
http://www.xgezhang.com/android_sqlite_transaction.html