我在应用商店中发布了一款应用 我想在sqlite db中的user表中添加一个新列,并希望它不为null 但我也希望老用户能够使用该应用程序
如果旧用户使用新版本更新其应用,会发生什么?登录时,我从服务器获取信息,然后将其插入数据库。当新列
没有值时,db插入可能会停止另外,我该如何进行升级?
还有什么?
另外,我添加了3-4个新功能所需的新表。我在SQLite帮助器的onCreate方法中调用了他们的创建查询。除此之外,我还应该做些什么吗?
答案 0 :(得分:4)
在SQLite帮助程序的构造函数中,我添加了新的数据库版本
这将触发onUpgrade()
,好。
但是,您无法使用ALTER TABLE
添加NOT NULL
列。
您可以在onUpgrade()
中执行以保存用户数据的内容:
将旧表重命名为临时名称
使用新列和NOT NULL
从旧临时表中填充新表并为新列提供合理的非空默认值
删除临时表
你能给我一个例子,让我们说表名为USER,字段为NAME和EMAIL,现在我想添加一个新字段AGE?
以下是一个例子:
sqlite> create table user(name, email);
sqlite> insert into user select 'foo','bar';
sqlite> alter table user rename to user_temp;
sqlite> create table user(name, email, age not null);
sqlite> insert into user select name,email,-1 from user_temp;
sqlite> drop table user_temp;
sqlite> select * from user;
name|email|age
foo|bar|-1
另外,我已经为新功能添加了3-4个全新表。我在SQLite帮助器的onCreate方法中调用了他们的创建查询。除此之外,我还应该做些什么吗?
我应该在onCreate和onUpgrade中或仅在onUpgrade中为新表创建新的创建?
确保在onUpgrade()
中创建相同的新表。
onCreate()
仅在第一次创建数据库时运行,而不是在升级时运行。
在onCreate()
和onUpgrade()
之后,数据库架构(表结构)应该是兼容的。 如何实施它取决于您。将CREATE TABLE
放在onUpgrade()
中是一种选择。有些人更愿意致电onCreate()
insinde onUpgrade()
,这可能会在尝试迁移旧数据时引起一些麻烦。