zoukankan      html  css  js  c++  java
  • android 数据库中的事务_银行转账示例

    主java

    package com.itheima.transtation;
    
    import com.itheima.transtation.db.BankOpenHelper;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.database.sqlite.SQLiteDatabase;
    import android.view.Menu;
    import android.view.View;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        //点击按钮执行该方法
        public void transtation(View v){
            //1.创建一个帮助类的对象
            BankOpenHelper bankOpenHelper = new BankOpenHelper(this);
            //2.调用数据库帮助类对象的getReadableDatabase创建数据库,初始化表数据,获取一个SqliteDatabase对象去做转账(sql语句)
            SQLiteDatabase db = bankOpenHelper.getReadableDatabase();
            //3.转账,将李四的钱减200,张三加200
            db.beginTransaction();//开启一个数据库事务
            try {
                db.execSQL("update account set money= money-200 where name=?",new String[]{"李四"});
                int i = 100/0;//模拟一个异常
                db.execSQL("update account set money= money+200 where name=?",new String[]{"张三"});
    
                db.setTransactionSuccessful();//标记事务中的sql语句全部成功执行
            } finally {
                db.endTransaction();//判断事务的标记是否成功,如果不成功,回滚错误之前执行的sql语句 
            }
        }
    
    }

    最好自己创建一个包来写数据库类

    package com.itheima.transtation.db;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    
    public class BankOpenHelper extends SQLiteOpenHelper {
    
        public BankOpenHelper(Context context) {
            super(context, "bank.db", null, 1);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            
            db.execSQL("create table account (_id integer primary key autoincrement,name varchar(20),money varchar(20))");
            db.execSQL("insert into account ('name','money') values ('张三','2000')");
            db.execSQL("insert into account ('name','money') values ('李四','5000')");
    
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
    
        }
    
    }

    xml  一个按钮的点击事件,很特别

    <?xml version="1.0"?>
    
    -<RelativeLayout tools:context=".MainActivity" android:paddingTop="@dimen/activity_vertical_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
    
    <Button android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="@string/transtation" android:onClick="transtation" android:layout_centerInParent="true"/>
    
    </RelativeLayout>

    老师笔记

    # 4 数据库的事务
            
        事务: 执行多条sql语句,要么同时执行成功,要么同时执行失败,不能有的成功,有的失败

        银行转账


        //点击按钮执行该方法
        public void transtation(View v){
            //1.创建一个帮助类的对象
            BankOpenHelper bankOpenHelper = new BankOpenHelper(this);
            //2.调用数据库帮助类对象的getReadableDatabase创建数据库,初始化表数据,获取一个SqliteDatabase对象去做转账(sql语句)
            SQLiteDatabase db = bankOpenHelper.getReadableDatabase();
            //3.转账,将李四的钱减200,张三加200
            db.beginTransaction();//开启一个数据库事务
            try {
                db.execSQL("update account set money= money-200 where name=?",new String[]{"李四"});
                int i = 100/0;//模拟一个异常
                db.execSQL("update account set money= money+200 where name=?",new String[]{"张三"});

                db.setTransactionSuccessful();//标记事务中的sql语句全部成功执行
            } finally {
                db.endTransaction();//判断事务的标记是否成功,如果不成功,回滚错误之前执行的sql语句
            }
        }

  • 相关阅读:
    mysql索引
    springboot mybatis 后台框架平台 shiro 权限 集成代码生成器
    java 企业网站源码模版 有前后台 springmvc SSM 生成静态化
    java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis
    activiti工作流的web流程设计器整合视频教程 SSM和独立部署
    .Net Core中的ObjectPool
    文件操作、流相关类梳理
    .Net Core中的配置文件源码解析
    .Net Core中依赖注入服务使用总结
    消息中间件RabbitMQ(一)
  • 原文地址:https://www.cnblogs.com/liangqiyuan/p/5690577.html
Copyright © 2011-2022 走看看