一、修改数据库的表结构(更新数据库版本)。
1、在PersonSQliteOpenHelper类中,PersonSQliteOpenHelper的构造方法中需要传入4个参数,最后一个便是数据库版本。当版本数值变化(只能是增加)时就会调用PersonSQliteOpenHelper类中的onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法。
2、在onUpgrade方法中采用执行SQL语句来更改数据库的表结构。采用SQLiteDatabase对象的execSQL(sql)方法修改数据库的表结构,参数sql是需要执行的SQL语句。
3、表中增加一列的SQL语句是:ALTER TABLE person ADD account varchar(20).
表结构增加一列的代码如下:
1 public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { 2 db.execSQL("alter table person add account varchar(20)"); 3 }
二、数据库的事务
1、为何需要事务?
保证多个操作同时成功或者同时失败时采用事务。比如银行转账:A转帐给B,需要保证A账户中金额减少,同时还需要保证B账户中金额增加。一下介绍以模拟转账为例。因此需要修改数据库的表结构
2、建立事务。
①.new出来一个PersonSQliteOpenHelper对象helper;
②.通过PersonSQliteOpenHelper对象的getWritableDatabase()方法获得一个可写的SQLiteDatabase(数据库)对象db;
③.通过SQLiteDatabase(数据库)对象的beginTransaction()方法开启一个事务(事务的具体写法在该方法的说明文档中已经有实例了:采用一个try...finally的逻辑编写事务);
④.在try中编写需要执行的逻辑,并在try代码块的最后执行SQLiteDatabase(数据库)对象的setTransactionSuccessful()的方法,它是标记数据库事务执行成功,如果没有这个代码则默认是执行失败的,数据会回滚。
⑤.在finally代码块中执行SQLiteDatabase(数据库)对象的endTransaction()方法,并close数据库对象。另外也可以在try代码块后面增加一个catch代码块,以捕获各类异常。
数据库事务代码如下:
1 public void testTransecation() throws Exception { 2 PersonSQliteOpenHelper helper = new PersonSQliteOpenHelper(getContext()); 3 SQLiteDatabase db = helper.getWritableDatabase(); 4 db.beginTransaction(); 5 try { 6 db.execSQL("update person set account = account - 1000 where name = ?", 7 new Object[] { "zhangsan" }); 8 9 db.execSQL( "update person set account = account + 1000 where name = ?", 10 new Object[] { "wangwu" }); 11 db.setTransactionSuccessful(); 12 }catch(Exception e) { 13 14 } 15 finally { 16 db.endTransaction(); 17 db.close(); 18 } 19 }