欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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();
	}
}