阅读更多 Android中SQLite版本升级
网上有很多文章,但是感觉写的都不是很明白
前提:
定义DbOpenHelper类继承SQLiteOpenHelper
重写onCreate和onUpgrade方法
onDowngrade是降级的方法,应该不会用到
定义两个属性
// 数据库名称,如果是null就会创建一个在内存中的数据库,当然内存被清理数据也就消失了
private static final String DATABASE_NAME = "test.db";
// 数据库版本,必须大于1,不然抛异常
private static final int DATABASE_VERSION = 1;

最重要的方法是(网上都没有说):
public DbOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
一,有了前提就可以说说执行过程
1,在使用数据库的时候就会调用DbOpenHelper构造方法
2,猜测(懒,没有看源码)SQLite会根据DATABASE_NAME进行判断,如果不存在就创建,同时记录版本号。然后调用onCreate方法
3,如果DATABASE_NAME存在,就检查版本号,如果版本号一致就继续执行
4,如果版本号不一致就执行onUpgrade方法
二,onUpgrade方法(自己定义规则,版本号是连续)
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 1是初始化版本,所以不用考虑
// 不能使用else if, 是为了解决跨版本的问题比如1直接升级到5需要执行2,3,4,5
// newVersion在这个方法没有用到,可以做个判断newVersion == DATABASE_VERSION
// 如果不等就抛异常(SQLite内部出现错误了,这种应该不可能出现)
int currVersion = oldVersion;
if (currVersion == 2) {
// TODO执行相应的数据库变更代码
currVersion = 3;
}
if (currVersion == 3) {
// TODO执行相应的数据库变更代码
currVersion = 4;
}
if (currVersion == 4) {
// TODO执行相应的数据库变更代码
currVersion = 5;
}
if (currVersion == 5) {
// TODO执行相应的数据库变更代码
}
}
三,如何保留原始数据,创建临时表,初始化值之类的都属于sql范畴,就不说了。


更多相关文章

  1. android-sdk-windows版本号下载
  2. Android sdk配置 常见问题及处理方法
  3. Android之自定义Dialog屏幕旋转时自动关闭解决方法
  4. Android客户端和服务器端数据交互的第一种方法
  5. Android Zxing 转换竖屏扫描且提高识别率的方法
  6. 关于Android的模拟器不能正常启动的解决方法
  7. android 杀死进程的三种方法

随机推荐

  1. Android(安卓)UI设计小知识——Nine-Patc
  2. 注册广播的两种方式:动态广播和静态广播的
  3. Android开发:Handler异步通信机制全面解析
  4. 盘点android中常见的设计模式(九) -- Adapt
  5. Android之Android(安卓)studio如何解决Mu
  6. 理解Android的handler机制--从应用到原理
  7. 从零开始--系统深入学习android(实践-让我
  8. android仿iphone滑动解锁
  9. Android面试题目之常见的选择题
  10. 关于android编码问题-URL中文编码-Activi