ios-FMDB 添加字段,添加自增長

需求:

需要在數據中添加字段,設置字段自增長

實現方式:

1、判斷表中是否存在改字段,如果不存在則添加

if (![db columnExists:@"新增字段" inTableWithName:@"表名"]){  
   NSString *alertStr = [NSString stringWithFormat:@"ALTER TABLE %@ ADD %@ 
   INTEGER",@"表名",@"新增字段"];  
    BOOL worked = [db executeUpdate:alertStr];  
  if(worked){
    NSLog(@"插入成功");
   }else{
       NSLog(@"插入失敗");
   }
}

2、在sqlite表中不支持修改和刪除字段

alter table 表名 rename column A to B
alter table 表名 drop column 字段

3、設置自增長" integer primary key AUTOINCREMENT "


 NSString *createSpaceSql = [NSString stringWithFormat:@"create table if not exists  schoolSpace (buss_id integer primary key AUTOINCREMENT,title text,content text,picture_urls text,age int)"];//UNIQUE唯一
[database executeUpdate:createSpaceSql];

//寫入數據到數據庫
NSString *insertSql = [NSString stringWithFormat:@"insert into schoolSpace (title, content, picture_urls,age) values ('%@','%@','%@',%d)",@"張三",@"femail",@"http://baidu.com",5];
        if (![db executeUpdate:insertSql]) {
            NSLog(@"insert row fail");
            
        }

示例


+ (BOOL)createTable
{
    __block BOOL res = YES;
    JKDBHelper *jkDB = [JKDBHelper shareInstance];
    [jkDB.dbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {
        NSString *tableName = NSStringFromClass(self.class);
        NSString *columeAndType = [self.class getColumeAndTypeString];
        NSString *sql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@(%@);",tableName,columeAndType];
        if (![db executeUpdate:sql]) {
            res = NO;
            *rollback = YES;
            return;
        };
        
        NSMutableArray *columns = [NSMutableArray array];
        FMResultSet *resultSet = [db getTableSchema:tableName];
        while ([resultSet next]) {
            NSString *column = [resultSet stringForColumn:@"name"];
            [columns addObject:column];
        }
        NSDictionary *dict = [self.class getAllProperties];
        NSArray *properties = [dict objectForKey:@"name"];
        NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"NOT (SELF IN %@)",columns];
        //過濾數組
        NSArray *resultArray = [properties filteredArrayUsingPredicate:filterPredicate];
        for (NSString *column in resultArray) {
            NSUInteger index = [properties indexOfObject:column];
            NSString *proType = [[dict objectForKey:@"type"] objectAtIndex:index];
            NSString *fieldSql = [NSString stringWithFormat:@"%@ %@",column,proType];
            NSString *sql = [NSString stringWithFormat:@"ALTER TABLE %@ ADD COLUMN %@ ",NSStringFromClass(self.class),fieldSql];
            if (![db executeUpdate:sql]) {
                res = NO;
                *rollback = YES;
                return ;
            }
        }
    }];
    
    return res;
}

使用場景:

1、在Model中字段不夠用的時候,需要添加字段;
2、歡迎指正、交流。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容