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

 

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