SQLite中判断table中某字段是否已经存在

在app的版本更新中,经常会遇到sqlite中的表需要增加字段。

为了便于旧版本app的升级使用,在对table增加字段时,首先要判断table中是否已经存在了这个字段,如果还未存在,则通过alter table (table name) add的方式增加字段。

没有找到直接的方法进行table中某字段是否存在的判断,只能使用折中的办法,获取这个表中所有的字段,逐个进行判断。


如下:


//判断某表中某字段是否存在
-(BOOL)isExistColumnInTable:(NSString *)tableName ColumnName:(NSString *)column{
    //首先,数据库已经打开

    if ((tableName == nil) || (column == nil)) return NO;
   
    sqlite3_stmt *statement = nil;
   
    //NSString * sql = @"PRAGMA table_info([MyAsk_table]) ";
    NSString *sql = [NSString stringWithFormat:@"PRAGMA table_info(%@)", tableName];
    if (sqlite3_prepare_v2(database, [sql UTF8String], -1, &statement, NULL) != SQLITE_OK ) {
        NSLog(@"Error: failed to prepare statement.");
        [self closeDatabase];
        return NO;
    }
    while (sqlite3_step(statement) == SQLITE_ROW) {
        NSString *columntem = [[[NSString alloc] initWithCString:(char *)sqlite3_column_text(statement, 1) encoding:NSUTF8StringEncoding] autorelease];
        
        NSLog(@"columntem = %@", columntem);
        if ([column isEqualToString:columntem]) {
            sqlite3_finalize(statement);
            return YES;
        }
    }
    sqlite3_finalize(statement);
    
    return NO;
}

判断某表是否存在,可以直接用

     sqlite3_stmt *statement = nil;
    
     NSString * sql = @"select count(*) from sqlite_master where type = 'table' and name = 'MyAsk_table' ";
     if (sqlite3_prepare_v2(database, [sql UTF8String], -1, &statement, NULL) != SQLITE_OK ) {
     NSLog(@"Error: failed to prepare statement.");
     [self closeDatabase];
     return NO;
     }
     while (sqlite3_step(statement) == SQLITE_ROW) {
     NSString *count = [[[NSString alloc] initWithCString:(char *)sqlite3_column_text(statement, 0) encoding:NSUTF8StringEncoding] autorelease];
     
     NSLog(@"count = %@", count);
     if ([count integerValue] > 0) {
     sqlite3_finalize(statement);
     return YES;
     }
     }
     sqlite3_finalize(statement);
     return NO;
     



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值