前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[android] 数据库的事务

[android] 数据库的事务

作者头像
唯一Chat
发布2019-09-10 11:02:37
8050
发布2019-09-10 11:02:37
举报
文章被收录于专栏:陶士涵的菜地陶士涵的菜地

为什么需要事务,保证操作同时成功,最常见的场景银行转账,需要修改一下上一节的数据库进行模拟转账操作,修改数据库表,这时需要用到PersonSQLiteOpenHelper类中的onUpgrade()方法,修改一下构造方法中的version,就会回调到onUpgrade()方法,在此方法里面执行修改表的sql语句

这个方法只在版本号发生变化的时候调用一次,参数中有SQLiteDatabase对象,调用db对象的execSql()方法,传入sql语句 alter table person add account varchar(20) ,增加一个字段,把数据库文件导出到桌面上,使用SQLite expert personal 3软件打开。

先添加两条数据,添加数据使用db对象的系统api,先new获取ContentValues对象,调用values对象的put()方法,参数是key val,把数据放进去,调用db对象的insert()方法,插入数据。

使用事务,调用db对象的beginTransaction()方法开启事务,然后一个try catch包裹,try块里执行多条sql语句,调用db对象的setTransactionSuccessful()标记成功,finally块里调用db对象的endTransaction()方法提交或者回滚事务

Cmd 执行adb shell命令,进入android系统,cd /data/data/包名/database/,执行sqlite3 persion.db 进入数据库命令行。

测试用例:

    /**
     * 测试事务
     * @throws Exception
     */
    public void testTransaction() throws Exception{
        PersonSQLiteOpenHelper helper =new PersonSQLiteOpenHelper(getContext());
        SQLiteDatabase db=helper.getWritableDatabase();
        db.beginTransaction();
        try {
            db.setTransactionSuccessful();
            db.execSQL("update person set account=account-100 where id=7");
            db.execSQL("update person set account=account+100 where id=8");            
        } finally {
            db.endTransaction();
        }

        db.close();
        
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-03-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档