Android Sqlite数据库版本升级管理初探

简介: Android Sqlite数据库版本升级管理初探 http://angrycode.cn/archives/428 在做Android项目涉及到版本升级,而数据库同样也会因为需求的变更而导致表的增减以及字段的增减。

Android Sqlite数据库版本升级管理初探

http://angrycode.cn/archives/428

在做Android项目涉及到版本升级,而数据库同样也会因为需求的变更而导致表的增减以及字段的增减。这是不可避免的。
麦洛刚开始做项目的时候很少考虑这个问题,但当软件需要升级版本后,数据库的表结构很有可能就改变了,如果不考虑数据库的版本升级,那么在软件升级时,就会因为数据库找不到
某些字段而出错。也不能把之前版本的数据库删除,因为以前版本的数据就会丢失。因此就需要认真的去管理数据库的版本了。

Android为开发者提供了SQLiteOpenHelper 这个访问数据库的接口。开发者只需要继承这个接口就可以了,它对外提供了两个方法:onCreate(SQLiteDatabase db)与
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。这两个方法都是由系统自动调用的。
onCreate()方法用于初次使用时系统会检查数据库的是否文件.如果不存在则创建数据库表;如果存在则检查数据库的版本号,如果这次的版本号比上次的版本号高,则调用onUpgrade()更新数据库表结构。

在SQLiteOpenHelper的子类的构造方法里面需要传递一个数据库的版本号,这个版本号是从1开始的,随着版本的更新,这个号码也是不断变化的。
例如软件在最初时的数据库版本是1,下次在升级的时候,就需要更改为2了(当然只要改成比上次的版本号要大就行了)。

下面是一个简单例子,angrycode:

<pre>
public class DatabaseHelper extends SQLiteOpenHelper {
/**
* log tag
*/
private static final String TAG = "DatabaseHelper";
/**
* 数据库名称
*/
private static final String DB_NAME = "user_manager.db";
/**
* 数据库版本号,默认从1开始,2013/5/31升级为2,需要数据库更新时,更改此值。
*/
private static final int DB_VERSION = 2;

private static DatabaseHelper instance = new DatabaseHelper(MyApplication.getContext());
private DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
private DatabaseHelper(Context context,int version){
super(context,DB_NAME,null,version);
}
public static DatabaseHelper getDatabaseHelper(){
return instance;
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建用户表
db.execSQL("create table if not exists user_table (id integer primary key autoincrement,name varchar(32) not null)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//这里对表进行修改
//String sql1 = "DROP TABLE IF EXISTS user_table;";
String sql7 = "ALTER TABLE user_table ADD COLUMN phone_number varchar(15);    
db.execSQL(sql7);
//onCreate(db);
}
</pre>

 

目录
相关文章
|
1月前
|
人工智能 搜索推荐 物联网
Android系统版本演进与未来展望####
本文深入探讨了Android操作系统从诞生至今的发展历程,详细阐述了其关键版本迭代带来的创新特性、用户体验提升及对全球移动生态系统的影响。通过对Android历史版本的回顾与分析,本文旨在揭示其成功背后的驱动力,并展望未来Android可能的发展趋势与面临的挑战,为读者呈现一个既全面又具深度的技术视角。 ####
|
2月前
|
监控 关系型数据库 MySQL
如何升级MySQL数据库?
【10月更文挑战第16天】如何升级MySQL数据库?
|
4月前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
4月前
|
开发工具 git 索引
repo sync 更新源码 android-12.0.0_r34, fatal: 不能重置索引文件至版本 ‘v2.27^0‘。
本文描述了在更新AOSP 12源码时遇到的repo同步错误,并提供了通过手动git pull更新repo工具来解决这一问题的方法。
162 1
|
4月前
|
编解码 Android开发 UED
【性能狂飙!】揭秘Android应用极速变身秘籍:内存瘦身+用户体验升级,打造丝滑流畅新境界!
【8月更文挑战第12天】构建高效Android应用需全方位优化,尤其重视内存管理和用户体验。通过弱引用降低内存占用,懒加载资源减少启动负担。运用Kotlin协程确保UI流畅不阻塞,响应式设计适配多屏需求。这些策略共同提升了应用性能与用户满意度。
58 1
|
5月前
|
Dart API 开发工具
Flutter Android 14 强制升级说明 2024
猫哥我也是心大,当群友问我 flutter 如何升级编译 Android 14 时才发现需要提交新版本。
121 0
Flutter Android 14 强制升级说明 2024
|
4月前
|
IDE API 开发工具
与Android Gradle Plugin对应的Gradle版本和Android Studio版本
与Android Gradle Plugin对应的Gradle版本和Android Studio版本
507 0
|
5月前
|
关系型数据库 MySQL 测试技术
如何进行数据库的升级?
【7月更文挑战第21天】如何进行数据库的升级?
326 1
|
5月前
|
关系型数据库 MySQL 测试技术
数据库升级是一个涉及数据备份、新版本安装、数据迁移和测试等关键环节的复杂过程
【7月更文挑战第21天】数据库升级是一个涉及数据备份、新版本安装、数据迁移和测试等关键环节的复杂过程
144 1
下一篇
DataWorks