Android中SQLite事务的操作

16 篇文章 0 订阅
14 篇文章 0 订阅

1.创建一个数据库帮助类。

package com.wzw.sqllitedemo.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * 
 * 数据库帮助类,用于创建管理数据库
 * @author Administrator
 *
 */
public final class PersonSQLiteOpenHelper extends SQLiteOpenHelper {

	private String tag="PersonSQLiteOpenHelper";

	/**
	 * 数据库的构造函数
	 * @param context
	 * @param name	数据库名称
	 * @param factory	游标工厂
	 * @param version	版本
	 */
	public PersonSQLiteOpenHelper(Context context) {
		super(context, "my.db", null, 2);
		
		
	}

	/**
	 * 数据库第一次创建时调用此方法
	 * 用于初始化表
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		//SQLiteDatabase对象已经连接数据库,直接进行性数据库操作
		String sql="create table person(_id integer primary key,name varchar(15),age integer);";
		db.execSQL(sql);		//创建person表
		
	}

	/**
	 * 数据库的版本号更新时调用
	 * 用于更新数据库的内容(删除表,更新表,删除表)
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int  oldVersion, int newVersion) {

		if(oldVersion==1&&newVersion==2){
			//数据库更新,增加balance余额列,事务的处理
			Log.i(tag, "数据库更新了");
			db.execSQL("alter table person add balance integer");
			
		}
		
		
	}

}

数据库表person中分别有id,name,age,banlance列


2.创建一个junit test类来测试

package com.wzw.sqllitedemo.test;

import java.util.List;

import com.wzw.sqllitedemo.dao.PersonDao;
import com.wzw.sqllitedemo.db.PersonSQLiteOpenHelper;
import com.wzw.sqllitedemo.entities.Person;

import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase;
import android.util.Log;

public class TestCase extends AndroidTestCase {

	private String tag="TestCase";

	public void test(){
		//数据库什么时候创建
		PersonSQLiteOpenHelper openHelp=new PersonSQLiteOpenHelper(getContext());
		//第一次连接数据库的时创建数据库,oncreate调用
		openHelp.getWritableDatabase();
	}
	

	public void testTransaction(){
		PersonSQLiteOpenHelper openHelper=new PersonSQLiteOpenHelper(getContext()); //获取数据库帮助类
		SQLiteDatabase db=openHelper.getWritableDatabase();//获得可写数据库
		if(db.isOpen()){
			//如果数据库可读,进行操作
			//1.从张山扣1000
			try{
				db.beginTransaction();
				db.execSQL("update person set balance=balance-1000 where name='zhangsan';");
				
				//ATM出异常
				//int tes=1/0;
				//2.向李四加1000元
				db.execSQL("update person set balance=balance+1000 where name='lisi';");
				db.setTransactionSuccessful();//标记事务成功!
				
			}finally{
				db.endTransaction();
				db.close();
				
			}

			
			
		}		
	}
	
	
	
}

事务中必须调用setTransactionSuccessful()来标识事务成功。




初学安卓,记录点点滴滴。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值