Android中SQLite事务的操作

来源:互联网 发布:优酷网络大电影分成 编辑:程序博客网 时间:2024/06/05 06:17

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);}/** * 数据库第一次创建时调用此方法 * 用于初始化表 */@Overridepublic void onCreate(SQLiteDatabase db) {//SQLiteDatabase对象已经连接数据库,直接进行性数据库操作String sql="create table person(_id integer primary key,name varchar(15),age integer);";db.execSQL(sql);//创建person表}/** * 数据库的版本号更新时调用 * 用于更新数据库的内容(删除表,更新表,删除表) */@Overridepublic 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.从张山扣1000try{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