数据库升级的意义
在应用程序开发的过程中,数据库的升级是一个很重要的组成部分(如果用到了数据库),因为程序可能会有V1.0,V2.0等版本,当用户安装新版本的程序后,必须要保证用户数据不能丢失,对于数据库设计,如果发生变更(如多添加一张表,表的字段增加或减少等),那么我们必须想好数据库的更新策略。
程序如何知道我们的数据库需要升级呢?
SQLiteOpenHelper类的构造函数有一个参数是version即数据库版本号,比如在软件1.0版本中,我们使用SQLiteOpenHelper访问数据库时,该参数为1,那么数据库版本号1就会写在我们的数据库中。到了2.0版 本,我们的数据库需要发生变化,那么我们2.0版本的程序中就要使用一个大于1的整数来构造SQLiteOpenHelper类,用于访问新的数据库,比如2。当我们的2.0新程序读取1.0版本的老数据库时,就发现老数据库里存储的数据库版本是1,而我们新程序访问它时填的版本号为2,系统就知道数据库 需要升级。
当系统在构造SQLiteOpenHelper类的对象时,如果发现版本号不一样,就会自动调用onUpgrade函数,在这个方法里对数据库进行升级。 在这个函数中把老版本数据库的相应表中增加字段,并给每条记录增加默认值即可。新版本号和老版本号都会作为onUpgrade函数的参数传进来,便于开发者知道数据库应该从哪个版本升级到哪个版本。升级完成后,数据库会自动存储最新的版本号为当前数据库版本号
升级逻辑怎么写
假如我们开发的程序已经发布了两个版本:V1.0,V2.0,我们正在开发V3.0。每一版的数据库版本号分别是1,2,3。
V1.0:user(username, password);
V2.0: user(username,password),
region(region, code);
V3.0: user(username,password),
region(region, code, country);
可以看出,第一次升级增加了一张表,而第二次升级在原有表基础上增加了一列。 对于这种情况,我们应该如何实现升级?
V1.0->V3.0 DB 1-3
V2.0->V3.0 DB 2-3
SQLite提供了ALTER TABLE命令,允许用户重命名或添加新的字段到已有表中,并且只能在表的末尾添加字段