android数据库升级兼容老版本吗,关于Android数据库的升级

本文围绕Android数据库升级兼容老版本展开。介绍了增加表的几种方式,如在onCreate新建表、升级版本号触发onUpgrade删表重建,这两种会导致数据丢失不可取,还介绍了只创建新表的方法。同时说明了修改表定义时,因SQLite对ALTER TABLE命令支持有限,可采用临时表的四步处理办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

增加表

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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值