首页 理论教育 数据库升级的常见方式及方法

数据库升级的常见方式及方法

时间:2023-06-17 理论教育 版权反馈
【摘要】:图5.292.数据库升级的问题及相关解决方案应用升级,数据库文件是否会删除?

数据库升级的常见方式及方法

1.数据库版本及升级方法

假如我们开发了一款App,里面用到了数据库,假定这个数据库版本为v1.0,在这个版本中创建一个x.db的数据库文件,通过onCreate()方法创建了第一个table,t_user,里面有两个字段:_id,user_id。若想再增加一个字段user_name,这个时候我们就需要对数据库表的结构进行修改了,可以把更新数据库的操作放到onUpgrade()方法中,具体操作是在实例化自定义SQLiteOpenHelper的时候,修改版本号,比如把1改成2,就会自动调用onUpgrade()了。另外,对于每个数据库版本都应该做好相应的记录(文档),类似于图5.29所示这种。

图5.29

2.数据库升级的问题及相关解决方案

(1)应用升级,数据库文件是否会删除?

答:不会。

(2)如果想删除表中某个字段或者增加一个新的字段,原先的数据还在吗?

答:在。

(3)粗暴地更新数据库版本,不保留数据如何做?

答:这里用的是第三方的ormlite,用户可以自己写数据库创建以及删除,代码为:(www.xing528.com)

(4)假如已经升级到第三个版本了,在第二个版本增加了一个表,然后第三个版本也增加了一个表,假如用户直接从第一个版本升级到第三个版本,这样没经过第二个版本,就没有增加的那个表,这该如何做?

答:可以在onUpgrade()里写一个switch(),结构如下:

细心的用户可能发现这里并没有写break,这就对了,这是为了保证跨版本升级时,每次数据库修改都能全部执行到,这样可以保证表结构都是最新的。另外不一定是建表语句,修改表结构也可以。

(5)旧表的设计太糟糕,很多字段要改,改动太多,想建一个新表,但是表名要一样,而且以前的一些数据要保存到新表中。

答:① 将旧表改名成临时表:ALTER TABLE User RENAME TO _temp_User;

② 创建新表:CREATE TABLE User (u_id INTEGER PRIMARY KEY,u_name VARCHAR(20),u_age VARCHAR(4));

③ 导入数据;INSERT INTO User SELECT u_id,u_name,"18" FROM _temp_User;//原表中没有的要自己设个默认值;

④ 删除临时表;DROP TABLE_temp_User。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈