ldehai

让每个人都能接受平等的教育

嗨,我是刘德海 (@ldehai),iOS / Mac 独立开发者,现居南京。我创建了AventLabs,一个在线学习编程和设计的平台,主要面向初学者。


我正在写一本书《每个人都会编程》

iOS APP Database Version Control

APP里一直使用SQLite数据库保存数据,不过有个问题觉得挺麻烦,当我要加新功能,而原来的表结构已经不能满足要求时,需要修改表,或者新增表。那么老版本升级到新版本时就需要升级数据库,之前我都是判断新表有没有存在,不存在则创建。这样很容易搞乱掉,如果涉及到多个表,判断起来逻辑不清晰,把自己都搞晕了。</p>

在经历过几次折腾后,我发现数据库也需要用版本来控制起来,就像代码有版本一样。这样我只需要判断当前的数据库版本是多少,就知道要不要升级数据库了。假设之前版本是1.0,现在版本是1.1,代码很简单:

NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];
NSString* ver = [pref stringForKey:@"dbver"];
if ([ver isEqualToString:@"1.0"])
{
    NSString *dbPath  = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/database.db"];

    EGODatabase* database = [EGODatabase databaseWithPath:dbPath];

    NSString *strSql = @"create table newtable(id integer primary key asc, main text);";
    [database executeQuery:strSql];

    [database close];

    NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];
    [pref setValue:@"1.1" forKey:@"dbver"];
}

当然自己还是要记录好每次升级的变动情况,备查。

最近的文章

热心的加拿大设计师Andrew

今天收到Andrew的邮件:I'm a graphic designer and I really like your app. Would you be interested in letting me update the icon for you? I'll do it for free.真的挺喜欢这些人,愿意为了自己喜欢的东西付出,不要回报。对我来说也是一种莫大的鼓舞。最新的设计图,还可以吧,比原来的提升不少。loading page…

杂谈继续阅读