您的位置:首页 > 移动开发 > Android开发

android数据升级方案

2014-09-02 13:55 253 查看
在android中有时候需要对本地数据库做升级,通常做的方案大概是这样子的:

A: onUpgrade方法中,根据当前的oldVersion和newVerson,判断我们需要在哪些版本后开始升级,若不在设定的升级版本之前,则不做处理否则进行升级处理

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// 8版本之前,按照原代码处理
if (oldVersion < 8) {
upgradeDropDB(db, oldVersion, newVersion);
return;
}
// SQLiteOpenHelper中已经添加事务,数据库更新不需要添加事务
// 根据oldVersion,循环升级,每次升级一个版本
while (oldVersion < newVersion) {
upgradeDB(db, oldVersion, newVersion);
oldVersion++;
}
}


B: 进行升级处理 【在制定版本之前删除以前所有的表】

private void upgradeDropDB(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 8) {
db.execSQL("DROP TABLE IF EXISTS "
+ DBConstants.DB_TABLE.TABLE_PROVINCE);
db.execSQL("DROP TABLE IF EXISTS "
+ DBConstants.DB_TABLE.TABLE_CITY);

db.execSQL("DROP TABLE IF EXISTS "
+ DBConstants.DB_TABLE.TABLE_DISTRICT);
db.execSQL("DROP TABLE IF EXISTS "
+ DBConstants.DB_TABLE.TABLE_STREET);
db.execSQL("DROP TABLE IF EXISTS "
+ DBConstants.DB_TABLE.TABLE_MOBILE_PAYMENT_BROWSE);
db.execSQL("DROP TABLE IF EXISTS "
+ DBConstants.DB_TABLE.TABLE_ADDRESS);
db.execSQL("DROP TABLE IF EXISTS "
+ DBConstants.DB_TABLE.TABLE_USER_ACCOUNT);
onCreate(db);
}
否则做升级

/*
* 数据库升级方法:根据oldVersion,每次升级一个版本
*/
private void upgradeDB(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion) {
case 8:
// 创建temp表
db.execSQL(DBConstants.CREATE_TEMP_TABLE_USER_ACCOUNT);
// 创建新表
db.execSQL(DBConstants.CREATE_TABLE_USER_ACCOUNT_SQLITE);
// 插入表数据
db.execSQL(DBConstants.INSERT_TABLE_USER_ACCOUNT_DATA);
// 删除temp表
db.execSQL(DBConstants.DROP_TABLE_USER_ACCOUNT);
break;

default:
break;
}
}


// 将现有数据表数据,名字进行变更
public static final String CREATE_TEMP_TABLE_USER_ACCOUNT = "alter table table_user_account rename to _temp_table_user_account";

// 添加数据
public static final String INSERT_TABLE_USER_ACCOUNT_DATA = "insert into table_user_account select *,'' from _temp_table_user_account";

// 删除掉中间表
public static final String DROP_TABLE_USER_ACCOUNT = "drop table _temp_table_user_account";

// 创建新表
public static final String CREATE_TABLE_USER_ACCOUNT_SQLITE = "create table  if  not exists "
+ DBConstants.DB_TABLE.TABLE_USER_ACCOUNT
+ "(_id integer primary key autoincrement,"
+ DBConstants.USER_ACCOUNT.ACCOUNT_NAME
+ " text,"
+ DBConstants.USER_ACCOUNT.LOGIN_TIME
+ " integer,"
+ DBConstants.USER_ACCOUNT.ACCOUNT_PWD
+ " text,"
+ DBConstants.USER_ACCOUNT.LOGIN_TYPE + " text"
// + ","
// + DBConstants.USER_ACCOUNT.REMEMBER_PWD + " integer"
+ ")";
过程是这样子的:

1: 生成一个现有表的的临时表【主要用来存储现有表中的数据】

2: 创建一个与现有表同名的新表【里面会添加字段】

3:将临时表中的数据插入到新建的表中

4: 删除临时表即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: