写点什么

Android Sqlite 数据库升级时注意事项,android 移动开发基础题库

用户头像
Android架构
关注
发布于: 54 分钟前

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


}


}


如果第一次的数据库版本为 1,现在升级之后版本为 2,即当前 app 版本比上次的 app 版本中的数据库的版本号高 1 级,也有可能是 3 升 4, 4 升 5 这样的,先看下这时的处理有几种情况要考虑:


1. 摒弃之前的表并重新创建该表


这种情况一般是数据库中的数据可能是一些无关紧要的临时数据,处理比较简单粗暴,直接删除重建,且表的结构跟之前完全一样。不过应该很少有采用这种方式的吧。


@Override


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


switch (oldVersion) {


case 1://这里的数值是上次的


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


版本,也就是针对上次的版本,本次的版本要做哪些改变


db.execSQL("DROP TABLE IF EXISTS " + TableEvent.TABLE_NAME);


db.execSQL(TableEvent.CREATE_SQL);


default:


break;


}


}


2. 在之前基础上创建新的表


这种情况也比较简单,主要是新版比之前的版本创建新的表,而且这个表跟之前的表没有什么关系。这时同时也要在 onCreate 中加上执行创建的 sql(针对新用户)。


@Override


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


switch (oldVersion) {


case 1://这里的数值是上次的版本,也就是针对上次的版本,本次的版本要做哪些改变


//这种情况需要同时在 onCreate 中加上执行新表的创建 sql(针对新用户)


db.execSQL(xxxxx);


default:


break;


}


}


3. 在老表基础上新增字段


这种情况需要修改老的表新增字段


@Override


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


switch (oldVersion) {


case 1://这里的数值是上次的版本,也就是针对上次的版本,本次的版本要做哪些改变


//这种情况需要同时在 onCreate 中加上执行新增字段的创建表 sql(针对新用户)


db.execSQL("ALTER TABLE TableEvent.CREATE_SQL ADD COLUMN TableEvent.xxx VARCHAR(255)");


default:


break;


}


}


4. 数据库升级时保留老的数据并同步到新的表当中


这种情况是新表保留老表的字段结构情况


@Override


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


switch (oldVersion) {


case 1://这里的数值是上次的版本,也就是针对上次的版本,本次的版本要做哪些改变


//老的表重命名


String CREATE_TEMP_BOOK = "alter table book rename to _temp_book";


//创建新的表,表名跟原来一样,并保留原来的字段


String CREATE_BOOK = "create table book(bookId integer primarykey, bookName text);";


//将重命名后的老表中的数据导入新的表中


String INSERT_DATA = "insert into book select *,'' from _temp_book";


//删除老表


String DROP_BOOK = "drop table _temp_book";


db.execSQL(CREATE_TEMP_BOOK);


//这句要同时放到 onCreate 中,针对新用户


db.execSQL(CREATE_BOOK);


db.execSQL(INSERT_DATA);


db.execSQL(DROP_BOOK);


default:


break;


}


}


5. 新表跟以前的表字段结构完全不一样


这种情况是新表跟以前字段结构完全不一样或者说有大部分的差异,跟上面第 4 种处理差不多,但是需要手动查询老表的某些字段的数据然后插入的新表的对应字段,最后删除老表即可。

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android Sqlite数据库升级时注意事项,android移动开发基础题库