1.假如我们已经升级到第三个版本了,我们在第二个版本增加了一个表, 然后第三个版本也增加了一个表,假如用户直接从第一个版本升级到第三个版本,这样 没经过第二个版本,就没有增加的那个表,这可怎么办?
我们可以在onUpgrade()里写一个switch(),结构如下:
public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int arg2, int arg3) { switch(arg2){ case 1: db.execSQL(第一个版本的建表语句); case 2: db.execSQL(第二个版本的建表语句); case 3: db.execSQL(第三个版本的建表语句); } }细心的你可能发现这里并没有写break,这就对了,这是为了保证跨版本升级时,每次数据库 修改都能全部执行到!这样可以保证表结构都是最新的!另外不一定是建表语句,修改表结构 也可以哦!
2.旧表的设计太糟糕,很多字段要改,改动太多,想建一个新表,但是表名要一样 而且以前的一些数据要保存到新表中!
下面说下思路:
1.将旧表改名成临时表: ALTER TABLE User RENAME TO _temp_User;
2.创建新表: CREATE TABLE User (u_id INTEGER PRIMARY KEY,u_name VARCHAR(20),u_age VARCHAR(4));
3.导入数据; INSERT INTO User SELECT u_id,u_name,"18" FROM _temp_User; //原表中没有的要自己设个默认值
4.删除临时表; DROP TABLE_temp_User;