SQLite如何升级数据库

来源:互联网 发布:行知职高吧 编辑:程序博客网 时间:2024/05/28 15:09

熟悉SQLite的同学都知道 我们继承SQLiteOpenHelper 要重写两个方法

@Overridepublic void onCreate(SQLiteDatabase db) {//第一次创建数据库恩文件时候才会执行,之后不会再执行}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//数据库版本号比之前的版本大才会执行这个方法}


之前面试的时候有被面试官问到,什么时候会用到这两个方法,应该如何使用?

这里代码就不写了,说一下使用场景吧

 比如 我们新建了一张表 book.db 

public String CREATE_BOOK = "create table BOOK ("+"id integer primary key autoincrement,"+"price real,"+"name text,"+"pages integer";db.exexSQL(CREATE_BOOK );


1、现在有需求,需要增加字段

 @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        // 使用for实现跨版本升级数据库        for (int i = oldVersion; i < newVersion; i++) {            switch (i) {            case 1:                upgradeToVersion2(db);                break;            case 2:                upgradeToVersion3(db);                break;                             default:                break;            }        }    }         private void upgradeToVersion2(SQLiteDatabase db){        // favorite表新增1个字段        String sql1 = "ALTER TABLE "+SQL.T_FAVORITE+" ADD COLUMN deleted VARCHAR";        db.execSQL(sql1);    }    private void upgradeToVersion3(SQLiteDatabase db){        // favorite表新增2个字段,添加新字段只能一个字段一个字段加,sqlite有限制不予许一条语句加多个字段        String sql1 = "ALTER TABLE "+表名E+" ADD COLUMN message VARCHAR";        String sql2 = "ALTER TABLE "+表名+" ADD COLUMN type VARCHAR";        db.execSQL(sql1);        db.execSQL(sql2);    }

2、如何我们想再添加一张 Category表用于图书的分类

public String CREATE_CATEGORY = "create table CATEGORY ("+"id integer primary key autoincrement,"+"name text,"+"code integer";
db.exexSQL(CREATE_CATEGORY );


假如用户此时的app数据库版本为1,想要新增一张表有两种方法

一、卸载程序,重新下载最新app(比较极端)

二、升级数据库(升级APP时,覆盖安装app,包名路径下的文件包括数据库,不会删除)


那要怎么书写代码呢?

...

@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_BOOK );db.execSQL(CREATE_CATEGORY );}

@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("drop table if exists BOOK");db.execSQL("drop table if exists CATEGORY");onCreate(db);}

....

记得改版本号



原创粉丝点击