android 数据库 升级设计

很久以前设计的数据库创建与升级的方法,此设计避免了升级的时候需要多处修改的弊端。 代码如下:


 
public class DBAdatper {
private DBHelper dbHelper;
private SQLiteDatabase _db;
private final Context context;
public DBAdatper(Context context) {
super();
this.context = context;
dbHelper = new DBHelper(context, DATABASE_NAME, null, DB_VERSION);
_db = dbHelper.getWritableDatabase();
}
// 数据库名
private static final String DATABASE_NAME = "test";
 
//建表语句 此部分只是用户第一次安装的时候会在oncreate方法中调用 
//请注意CREATE部分不要做任何修改 所有的数据库修改都应该在 update_sql中进行
private static final String CREATE[] = new String[] {
"create table type (tid  integer primary key,name varchar(50));",
};
 
//数据库更新升级,此部分会在onupdate方法中调用
//请注意所有的数据库结构的修改操作都要在此处进行 否则会出现升级混乱的问题
private static String[] UPDATE = new String[]{
}; 
 
// 当前数据库版本    请保证 DB_VERSION的值等于update_sql.length+1
private static final int DB_VERSION = UPDATE.length+1;
/**
 * 数据库创建对象
 * 
 * @author popo
 * 
 */
private static class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context, String name, CursorFactory factory,int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
//创建表结构
int sql_numbers = CREATE.length;
//执行建表语句
for(int i=0;i<sql_numbers;i++){
try{
    db.execSQL(CREATE[i]);
}catch (Exception e) {
// TODO: handle exception
}
}
//执行升级部分 保证新装用户也可以执行到升级部分
onUpgrade(db, 1, DB_VERSION);
}
/**
 * 数据库升级部分
 */
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
int version = newVersion-1;
//由于数组的长度是从0开始的 而数据库版本是从一开始 所以 i=oldVersion-1
for(int i=oldVersion-1;i<version;i++){
try{
    db.execSQL(UPDATE[i]);
}catch (Exception e) {
// TODO: handle exception
}
}
}
}
}
 
 
这样数据库升级只在UPDATE数组中添加需要升级的SQL语句就可以了 ,不需要修改 DB_VERSION  不需要 修改 oncreate , onUpgrade 。
有什么不妥之处,望指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值