美文网首页
SQLite数据库事务之银行转账

SQLite数据库事务之银行转账

作者: MengkZhang | 来源:发表于2019-05-10 11:22 被阅读0次

数据库事物:执行一段逻辑 要么同时成功 要么同时失败

需求:张三给李四转账,点击转账,进行扣款

1,创建数据库表account,存有张三和李四的金额


    public MyOpenHelper(Context context) {
        super(context, "Account.db", null, 1);
    }

    //当数据库第一次创建的时候调用 特别适合做表结构的初始化 
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table info (_id integer primary key autoincrement,name varchar(20),phone varchar(20),money varchar(20))");
        db.execSQL("insert into info ('name','phone','money') values ('张三','138888','2000')");
        db.execSQL("insert into info ('name','phone','money') values ('李四','139999','5000')");
        
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

}

2,点击转账 开启数据库事务

3,转账结束 结束事务

public class MainActivity extends Activity {

    private MyOpenHelper myOpenHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myOpenHelper = new MyOpenHelper(getApplicationContext());

    }

    // 点击按钮进行转账的逻辑
    public void click(View v) {
        SQLiteDatabase db = myOpenHelper.getReadableDatabase();
        // 使用事物进行转账
        db.beginTransaction(); // 开启事物
        try {
            // 实现转账的逻辑 实际上就写sql语句

            db.execSQL("update info set money = money - 100 where name = ?",
                    new Object[] { "张三" });

            int i = 10 / 0;

            db.execSQL("update info set money = money + 100 where name = ?",
                    new Object[] { "李四" });

            // 给当前事物设置一个成功的标记
            db.setTransactionSuccessful();
        } catch (Exception e) {

            Toast.makeText(getApplicationContext(), "服务器忙,请稍后再转", 1).show();
        }

        finally {
            db.endTransaction(); // 关闭事物
        }

    }

}

相关文章

  • SQLite数据库事务之银行转账

    数据库事物:执行一段逻辑 要么同时成功 要么同时失败 需求:张三给李四转账,点击转账,进行扣款 1,创建数据库表a...

  • 6 事务操作

    事务概念 事务:数据库操作最基本单元,要么都成功,如果有一个失败,就是都失败 典型场景:银行转账,A给B转账,A钱...

  • 隔离级别和事务

    数据库事务 结合基本例子(银行转账)来分析: AB账户都有500元存款,A账户向B账户转账100元钱 ,操作分为6...

  • Sqlite事务锁状态以及死锁问题

    Sqlite事务锁 Sqlite事务中锁的状态 1 UNLOCKED: 表示数据库并未开启任何读写, 使用BEGI...

  • 使用事务

    SQLite 数据库是支持事务的。 事务的特性可以保证让某一系列的操作要么全部完成,要么一个都不会完成。 比如银行...

  • Android SQLite3

    Android SQLite3Android内置了SQLite数据库。 ACID,指数据库事务正确执行的4个要素。...

  • SQLite 事务(Transaction)

    SQLite 事务(Transaction) 事务(Transaction)是一个对数据库执行工作单元。事务(Tr...

  • Spring 事务管理

    1 什么是事务 生活中关于事务有一个常见的场景,即银行用户转账。简单的讲,转账可以分为下面 2 个步骤: 查看用户...

  • Mysql事务和锁

    1.什么是数据库的事务? 数据库事务的典型场景? 订单,转账 支付,电商等全部成功/全部不成功。金融 什么是事务?...

  • iOS面试-数据库比较:SQLite vs. Core Data

    SQLite SQLite是使用最多的数据库引擎,并且是开源的。它实现了无配置,无服务要求的事务数据库引擎。SQL...

网友评论

      本文标题:SQLite数据库事务之银行转账

      本文链接:https://www.haomeiwen.com/subject/bsiooqtx.html