开发者社区> hylinux1024> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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>

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android 组件化(一)项目模式管理、模式切换
在进行安装开发的时候我们经常会对项目进行不同业务逻辑处理分包,例如专门处理网络、数据库、业务逻辑代码的,如果我们不分包则所有东西写在一起,势必在开发过程中会浪费很多时间在寻找文件上,而分包的思想源于模块化,例如一些utils类,专门放到一个包下面,这样在使用的时候就能很快找到。节省开发时间,降低后期维护成本,那么组件化是什么?
0 0
基于Android的相册管理
社会经济和信息技术的快速发展使传统的数据管理方式逐渐升级为集中的数据管理。本毕业设计开发的电子相册系统就是在这样的环境下产生的。它可以在很短的时间内处理大量的数据,还可以缩短事务的运行时间,提高时间利用率。本电子相册系统采用的框架是SSM,编程语言是Java。数据库选择的是免费开源的MySQL。本电子相册系统能够满足大多数人的使用要求,界面布局大方美观,功能方面也基本满足人们日常生活所需。该系统还在解决安全性能方面提出了一些解决办法。总得来说,该系统不仅提高了管理者的工作效率,而且还实现了数据信息的集中的自动化管理,从而让数据信息的管理更加规范。本毕业设计开发的电子相册系统就是在这样的环境下产
0 0
Android窗口管理分析(4):Android View绘制内存的分配、传递、使用
Android窗口管理分析(4):Android View绘制内存的分配、传递、使用
0 0
Android窗口管理分析(3):窗口分组及Z-order的确定
Android窗口管理分析(3):窗口分组及Z-order的确定
0 0
Android窗口管理分析(2):WindowManagerService窗口管理之Window添加流程
Android窗口管理分析(2):WindowManagerService窗口管理之Window添加流程
0 0
Android窗口管理分析(1):View如何绘制到屏幕上的主观理解
Android窗口管理分析(1):View如何绘制到屏幕上的主观理解
0 0
从Toast显示原理初窥Android窗口管理
从Toast显示原理初窥Android窗口管理
0 0
【Android 返回堆栈管理】打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task(二)
【Android 返回堆栈管理】打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task(二)
0 0
【Android 返回堆栈管理】打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task(一)
【Android 返回堆栈管理】打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task(一)
0 0
【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★(四)
【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★(四)
0 0
+关注
hylinux1024
移动端开发者
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Android组件化实现
立即下载
蚂蚁聚宝Android秒级编译—— Freeline
立即下载
Android插件化:从入门到放弃
立即下载