在使用SQLite数据库存储时,事务应该怎么使用
1、事务就是保证数据的安全,一旦执行发送错误就可以回滚到最初的状态。举个例子:手机抢购,在抢购表(抢购成功之后保存用户信息和手机信息的表)插入记录,还要对剩余数量更新,所以这两个操作是一个事务,必须保证要么都执行,要么都不执行,这就是事务所要做的。一旦有一个操作执行出错,事务就会回滚到最初的状态,保证数据安全。
2、SQLite数据库是支持事务的,事务的特性可以保证让某一系列的操 作要么锾哩菸谷全部完成,要么一个都不会完成。那么在什么情况下才需要使用事务呢?想象以下场 景,比如你正在进行一次转账操作,银行会将转账的金额先从你的账户中扣除,然后再向收 款方的账户中添加等量的金额。看上去好像没什么问题吧?可是,如果当你账户中的金额刚 刚被扣除,这时由于一些异常原因导致对方收款失败,这一部分钱就凭空消失了!当然银行 肯定已经充分考虑到了这种情况,它会保证扣钱和收款的操作要么一起成功,要么都不会成 功,而使用的技术当然就是事务了。
3、接下来我们看一看如何在 Android中使用事务吧,仍然是在上一篇文章中的项目的基础上 进行修改。比如 Book表中的数据都已经很老了,现在准备全部废弃掉替换成新数据,可以 先使用delete()方法将Book表中的数据删除,然后再使用insert()方法将新的数据添加到表中。 我们要保证的是,删除旧数据和添加新数据的操作必须一起完成,否则就还要继续保留原来 的旧数据。
4、首先调用SQLiteDatabase的beginTransaction() 方法来开启一个事务,然后在一个异常捕获的代码块中去执行具体的数据库操作,当所有的 操作都完成之后,调用 setTransactionSuccessful()表示事务已经执行成功了,最后在 finally 代码块中调用 endTransaction()来结束事务 。
5、注意观察,我们在删除旧数据的操作完成后手动 抛出了一个 NullPointerEx罕铞泱殳ception,这样添瑕铆幌约加新数据的代码就执行不到了。不过由于事务的存 在,中途出现异常会导致事务的失败,此时旧数据应该是删除不掉的。现在可以运行一下程序并点击 Replacedata按钮,你会发现,Book表中存在的还是之前 的旧数据。然后将手动抛出异常的那行代码去除,再重新运行一下程序,此时点击一下 Replacedata按钮就会将 Book表中的数据替换成新数据了。