首页 > 代码库 > Android学习笔记_数据库(SQLite)(二)

Android学习笔记_数据库(SQLite)(二)

一、修改数据库的表结构(更新数据库版本)。

  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     }
View Code

二、数据库的事务  

  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     }
View Code

 

Android学习笔记_数据库(SQLite)(二)