增加表

1.在onCreate新建Category表,这种方法需要用户卸载老版本再安装新版的程序;(不可取)软件卸载造成老数据的丢失。

public class MyDatabaseHelper extends SQLiteOpenHelper {

public static final String CREATE_BOOK = "create table Book ("

+ "id integer primary key autoincrement, "

+ "author text, "

+ "price real, "

+ "pages integer, "

+ "name text)";

public static final String CREATE_CATEGORY = "create table Category ("

+ "id integer primary key autoincrement, "

+ "category_name text, "

+ "category_code integer)";

----------省略

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(CREATE_BOOK);

db.execSQL(CREATE_CATEGORY);

}

-----------省略

}

升级版本号,触发onUpgrade()方法,然后删除存在的表,再建表。(不可取)原因也是会造成数据的丢失。

----------

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL("drop table if exists Book");

db.execSQL("drop table if exists Category");

onCreate(db);

}

---------

3.升级版本号,在onUpgrade只创建新表如下:

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

if (oldVersion ==1) {

db.execSQL(CREATE_CATEGORY);

}

}

修改表定义

比如Category表添加pageNo字段。

SQLite数库对ALTER TABLE命令支持非常有限,只能在表末尾添加列,不能修改列定义,不能删除已有的列。我们可以采用临时表的办法。具体来说有四步:

*将现有表重命名为临时表;

*创建新表;

*将临时表的数据导入新表(注意处理修改的列);

*删除临时表。

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

switch (oldVersion) {

case 1:

//如果老版本是1,则新建Category表,即增加表的3方法

createCategoryTable(db);

case 2:

//如果老版本是2,

db.execSQL("ALTER TABLE Category RENAME TO Category_temp");

db.execSQL("CREATE TABLE Category(id integer primary key autoincrement,"

+ "category_name text, "

+"category_code integer"

+ "pageNo integer)");

db.execSQL("insert into Category(id, category_name, category_code, pageNo) "

+ "select id, category_name, category_code, 100 from Category_temp");

db.execSQL("DROP TABLE Category_temp");

break;

}

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐