adroid SQLiteOpenHelper数据表结构升级
程序员文章站
2022-05-31 08:17:12
...
最近在项目中遇到了一个新需求,需要增加用户在本地缓存中一个字段,由于用户缓存是根据所在群来进行分表保存的,在更新数据库升级时,发现要修改的表明是动态生成的,经过不断努力和网上的参考,终于找到了解决方法。
主要的逻辑还是放在自定义SQLiteOpenHelper类中的onUpgrade方法里,我们根据db参数可以获取所以的数据表,由于分表时表名都具有一定的规律,所以可以根据该规则来进行统一修改。下面就是笔者的实现逻辑,可供参考。
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//不同的数据库版本应该有不同的处理逻辑,目前只有本次升级
if (oldVersion == 1) {
//查询所有的数据表名
Cursor cursor = db.rawQuery("select name from sqlite_master where type='table' order by name", null);
while (cursor.moveToNext()) {
String name = cursor.getString(0);
if (!TextUtils.isEmpty(name) && name.startsWith("users_")) {
//根据匹配规则得到目标数据表,然后执行相应操作,本次只是新增一个字段而已
db.execSQL("ALTER TABLE " + name + " ADD COLUMN aliasName text");
}
}
//最后别忘了关闭cursor
cursor.close();
}
}
下一篇: C++_归并排序