主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语句
        }
    }

android 数据库中的事务_银行转账示例的更多相关文章

  1. Java中线程的锁和数据库中的事务隔离级别

    当涉及到两个或多个线程操作同一个资源时,就会出现锁的问题. 数据库中的某一条记录或者是某一个对象中的字段,可以修改,也可以读取,一般情况下,读取的那个方法应该加锁(即用synchronized互斥), ...

  2. Oracle 数据库中不同事务并发访问的问题

    现象 以SQL/Helper为例,打开不同的SQL窗口,对同一个表格进行操作,如下所示. 窗口1:当执行更新任务.紧接着执行查询时获得一组查询结果.结果是对的. 窗口2:而在另外一个SQL查询窗口中执 ...

  3. Android Studio中配置及使用OpenCV示例

    Android Studio配置及使用OpenCV 前言:最近在做项目移植,项目较大,在Eclipse中配置的Jni及OpenCV环境没任何问题,但是迁移到Studio中就问题一大堆,网上也找了一些资 ...

  4. Android 数据库 大量插入 事务开启

    对比在Android中批量插入数据的3中方式对比(各插入1W条数据所花费的时间): 1. 一个一个插入 publicstaticboolean insert(SQLiteOpenHelper open ...

  5. Sqlite数据库中的事务

    public void testTrasaction() throws Exception{  PersonSQLiteOpenHelper helper = new PersonSQLiteOpen ...

  6. Android 数据库中的数据给到ListView

    前言:因为之前学的都是用一个自己定义的类,完成将某一个bean中的数据直接获取,而实际中通常是通过数据库来得到的,总之,最终就是要得到数据.提一下最重要的东西,我把它叫做代理,如同一个校园代理,没有他 ...

  7. 描述下数据库中的事务--ACID各个的特点

    1. 原子性(Atomicity) 在一个事务内的操作,要么全部成功,要么全部失败. 2. 一致性(Consistency) 数据库从一个一致性状态,转移到另一个一致性状态. 3. 隔离性(Isola ...

  8. JAVA操作Oracle数据库中的事务

    实验1: create table yggz(code int, salary number(7,2)); insert into yggz values(1, 1000); insert into ...

  9. 数据库中事务的四大特性(ACID)

    本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务 ...

随机推荐

  1. MVC4数据注释与验证 2

    Using Validation Annotations Required必须项验证属性 [Required] public string FirstName { get; set; } [Requi ...

  2. 下一个系列学习列表Spring.net+NHibernate+MVC

    开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo 刘冬.NET 2011-08-19 ...

  3. Java元组Tuple使用实例--转载

    原文地址:http://50vip.com/35.html 一.为什么使用元组tuple? 元组和列表list一样,都可能用于数据存储,包含多个数据:但是和列表不同的是:列表只能存储相同的数据类型,而 ...

  4. rm反向删除的几种方法

    关键词:rm  删除 反向 参考: http://blog.sina.com.cn/s/blog_67e34ceb01014930.html http://bbs.csdn.net/topics/39 ...

  5. IIS 之 HTTP 错误 404.3 - Not Found(由于扩展配置问题而无法提供您请求的页面...)

    错误如下图所示: 其实在IIS7中肯定能支持的的,只是我们在Win7中安装IIS7的时候没有勾选这些功能,具体方法如下: 1.依次打开" 控制面板→程序→程序和功能→打开或关闭Windwos ...

  6. E - 娜娜梦游仙境系列——莫名其妙的插曲

    E - 娜娜梦游仙境系列——莫名其妙的插曲 E - 娜娜梦游仙境系列——莫名其妙的插曲 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 1 ...

  7. Solr 删除数据的几种方式

    原文出处:http://blog.chenlb.com/2010/03/solr-delete-data.html 有时候需要删除 Solr 中的数据(特别是不重做索引的系统中,在重做索引期间).删除 ...

  8. iOS retain、strong、weak、assign

    iOS retain.strong.weak.assign strong与weak是由ARC新引入的对象变量属性xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain和a ...

  9. Java SE ---流程控制语句

     java的控制流程有三种: 一,顺序流程             自上而下,按照代码的先后顺序执行 二,分支流程             1,if/else语句             2,swit ...

  10. java适配器模式随笔记

    今天学习了一下java中的适配器模式,在这里做个记录,方便以后查看 什么是适配器,适配就是连接源到目标的中间件,简单的例子就是我们的港水货手机充电器是大三角,我们想要在大陆正常使用我们需要一个转接充电 ...