Android中SQLite事务的操作

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()来标识事务成功。




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

Android中SQLite事务的操作,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。