default:
break;
}
}
}
}
其中的SQL的建表语句为:
public class SQL {
public static final String T_FAVORITE = “favorite”;
public static final String CREATE_TABLE_FAVORITE =
"CREATE TABLE IF NOT EXISTS " + T_FAVORITE + “(” +
"id VARCHAR PRIMARY KEY, " +
"title VARCHAR, " +
"url VARCHAR, " +
"createDate VARCHAR " +
“)”;
}
(2)v2.0:DATABASE_VERSION=1001,在favorite表添加1个deleted字段
public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = “mall.db”;
private static final int DATABASE_VERSION = 1001;
private static DBHelper instance = null;
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public synchronized static DBHelper getInstance(Context context) {
if (instance == null) {
instance = new DBHelper(context);
}
return instance;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL.CREATE_TABLE_FAVORITE);
// 若不是第一个版本安装,直接执行数据库升级
// 请不要修改FIRST_DATABASE_VERSION的值,其为第一个数据库版本大小
final int FIRST_DATABASE_VERSION = 1000;
onUpgrade(db, FIRST_DATABASE_VERSION, DATABASE_VERSION);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 使用for实现跨版本升级数据库
for (int i = oldVersion; i < newVersion; i++) {
switch (i) {
case 1000:
upgradeToVersion1001(db);
break;
default:
break;
}
}
}
private void upgradeToVersion1001(SQLiteDatabase db){
// favorite表新增1个字段
String sql1 = “ALTER TABLE “+SQL.T_FAVORITE+” ADD COLUMN deleted VARCHAR”;
db.execSQL(sql1);
}
}
(3)v3.0:DATABASE_VERSION=1002,在favorite表中添加message和type字段
public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = “mall.db”;
private static final int DATABASE_VERSION = 1002;
private static DBHelper instance = null;
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public synchronized static DBHelper getInstance(Context context) {
if (instance == null) {
instance = new DBHelper(context);
}
return instance;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL.CREATE_TABLE_FAVORITE);
// 若不是第一个版本安装,直接执行数据库升级
// 请不要修改FIRST_DATABASE_VERSION的值,其为第一个数据库版本大小
final int FIRST_DATABASE_VERSION = 1000;
onUpgrade(db, FIRST_DATABASE_VERSION, DATABASE_VERSION);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 使用for实现跨版本升级数据库
for (int i = oldVersion; i < newVersion; i++) {
switch (i) {
case 1000:
upgradeToV
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
ersion1001(db);
break;
case 1001:
upgradeToVersion1002(db);
break;
default:
break;
}
}
}
private void upgradeToVersion1001(SQLiteDatabase db){
// favorite表新增1个字段
String sql1 = “ALTER TABLE “+SQL.T_FAVORITE+” ADD COLUMN deleted VARCHAR”;
db.execSQL(sql1);
}
private void upgradeToVersion1002(SQLiteDatabase db){
// favorite表新增2个字段,添加新字段只能一个字段一个字段加,sqlite有限制不予许一条语句加多个字段
String sql1 = “ALTER TABLE “+SQL.T_FAVORITE+” ADD COLUMN message VARCHAR”;
String sql2 = “ALTER TABLE “+SQL.T_FAVORITE+” ADD COLUMN type VARCHAR”;
db.execSQL(sql1);
db.execSQL(sql2);
}
}
这就是升级的一个步骤。在onCreate中去执行onUpgrade。
在使用数据库时,我们会定义一个继承了SQLiteOpenHelper的子类,就比如刚才的DBHelper。我们通过版本号去更新一个数据库。我们更新一次数据库,当应用去访问数据库的时候就会读取数据库的版本号,如果和之前不一样,则会调用onUpgrade方法。
SQLiteOpenHelper的构造方法:
当版本号小于1时,是会报错的。 CursorFactory和DatabaseErrorHandler我们一般传null。
SQLiteOpenHelper的使用:
DatabaseHelper是继承了SQLiteOpenHelper的数据库类,其中,getWritableDatabase( )会调用getDatabaseLocked(false)方法,在该方法中实现了对数据库版本检查和升级等的逻辑。其中部分代码如下,