主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. iOS开发——多线程OC篇&(十一)多线程NSOperation高级用法

    自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewC ...

  2. Perl 引用与匿名数组

    写这篇是因为工作遇到一个需要使用列表作为hash的值的问题,这在Python中是非常简单而轻松的事,如下面这段python程序. def add_to_index(index, keyword, ur ...

  3. 好记心不如烂笔头之JQuery学习,第四章

    ---恢复内容开始--- JQuery中的事件和动画 JQuery中的事件: $(document).ready()该事件和JS中的window.load类似,但是window.load中需要等待所有 ...

  4. 一款基于jQuery轮播切换焦点图,可播放多张图片

    今天给大家分享一款基于jQuery轮播切换焦点图,可播放多张图片,在这个组件中,你可以任意指定8张图片,然后插件就会帮你自动生成缩略图,并且自动开始切换播放图片.当然,你也可以手动切换图片,只要点击缩 ...

  5. Linux分区有损坏修复

    如果Linux分区有损坏情况,启动有问题,不能正常进入文本或图形界面.那么一般会出现提示,需要输入Root密码登录后采用fsck -t ext3 -r /usr/local 修复 , /usr/loc ...

  6. 关于linux系统安全配置脚本

    本脚本是第二次更新,已经大量应用在某大型媒体网站体系中,加入了之前没有想到的一些安全设置.使用方法将其复制,保存为一个shell文件,比如security.sh.将其上传到Linux服务器上,执行sh ...

  7. SOA与C#

    What is SOA? SOA or Service oriented architecture is an architecture style for building business app ...

  8. 【Shell脚本学习10】Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等

    Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最 ...

  9. Uva 10305 - Ordering Tasks 拓扑排序基础水题 队列和dfs实现

    今天刚学的拓扑排序,大概搞懂后发现这题是赤裸裸的水题. 于是按自己想法敲了一遍,用queue做的,也就是Kahn算法,复杂度o(V+E),调完交上去,WA了... 于是检查了一遍又交了一发,还是WA. ...

  10. linq to sql 增删改查

    ORM<Object Relation Mapping> Linq To Sql: 一.建立Linq To Sql 类 : 理解上下文类: Linq To Sql 类名+context 利 ...