黎活明8天快速掌握android视频教程--18_在SQLite中使用事务
1 所谓的事业就是一系列的操作
比如:执行转账操作:将personid=1的账户转账10元到personid=2的账号中
所以的一系列操作就是:personid=1的账户钱要减少10元
personid=2的账户钱要增加10元
这样这上面这两个过程都操作成功了,这个数据库转账这个事务才操作成功
使用事务操作注意下面的几点:
BEGIN TRANSACTION:开始事务处理。
COMMIT:保存更改,或者可以使用 END TRANSACTION 命令。
使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功,则所有从beginTransaction()开始的操作都会被提交,如果没有调用setTransactionSuccessful() 方法则回滚事务。
注意下面几点:
1、使用SQLiteDatabase的beginTransaction()方法可以开启一个事务。
2、使用endTransaction()是结束一个事务,一个事务的结束分为两种方式,一种是commit正式提交、一种是rollback回滚的方式。执行endTransaction()到底是提交还是回滚由下面的方式决定,如果函数在执行endTransaction()之前调用了setTransactionSuccessful()说明业务执行成功,那就是提交,否则就是回滚。
3、所以setTransactionSuccessful()这个函数的执行一定要放在业务执行成功之后才调用,上面的就是放在两个db数据库业务操作的后面,如果db数据库发生异常就不会执行setTransactionSuccessful()这个函数,在finally中执行endTransaction()的时候发现没有调用setTransactionSuccessful()这个函数,说明业务操作失败,就采用回滚的方式相当的经典。
代码一定要按照下面的这个方式编写:
Java代码
代码如下:
//银行账户事务测试 public void payment() { SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); //开启事务 db.beginTransaction(); try { db.execSQL("update person set amount=amount-10 where personid=?", new Object[]{1}); db.execSQL("update person set amount=amount+10 where personid=?", new Object[]{2}); //设置事务标志为成功,当结束事务时就会提交事务 db.setTransactionSuccessful(); } catch(Exception e){ throw(e); } finally { //结束事务 db.endTransaction(); } }
posted on 2017-04-24 16:49 luzhouxiaoshuai 阅读(167) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!