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()来标识事务成功。
初学安卓,记录点点滴滴。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。