美文网首页
iOS DB数据库

iOS DB数据库

作者: 安宇辛 | 来源:发表于2021-09-06 16:23 被阅读0次

一:创建DBManager .h

#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN

@interface DBManager : NSObject

+(DBManager *)sharedInstance;
-(void)saveFristReposted:(NSArray *)reposted;
-(NSArray *)allReposted;
-(BOOL)deleteReposted:(NSString *)feedId;
-(BOOL)getdownStatus:(NSString *)feedId;
-(void)setLocalIdentifier:(NSString *)localIdentifier FeedId:(NSString *)feedId;
@end

二:DBManager .m

#import "DBManager.h"
#import <FMDatabase.h>

static FMDatabase *db;

@implementation DBManager

+(DBManager *)sharedInstance{
    static DBManager *instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if (instance == nil) {
            instance = [[DBManager alloc] init];
        }
    });
    return instance;
}
-(instancetype)init{
    if (self = [super init]) {
        [self creatDB];
    }
    return self;
}
-(void)creatDB{//先
    
    NSString *documentDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *dataBasePath = [documentDirPath stringByAppendingPathComponent:@"fans.db"];
    
    db = [FMDatabase databaseWithPath:dataBasePath];
    if ([db open]) {
        
        NSString *createdDbSql =  @"CREATE TABLE IF NOT EXISTS t_reposted (pk integer,username text, profile_pic_url text, des text,is_private integer default 0,feedId text, parentID text,shortcode text,takenTime integer,likerCount integer default 0,mediaType integer default 0,commentCount integer default 0,viewcount integer default 0,mediaUrl text,thumbUrl text, videoPicture text, saveUrl text,width integer,height integer,likeOrNot integer default 0,savedOrNot integer default 0,content text,isRepost integer default 0, downStatus integer default 0, isActive  integer default 0,dataTime integer,owner integer,localIdentifier text);"
        @"CREATE TABLE IF NOT EXISTS t_feed(pk text PRIMARY KEY NOT NULL, media_type integer, like_count integer, comment_count integer, view_count integer, thumbUrl text, mediaUrl text, exist integer,owner text)";
        BOOL result = [db executeStatements:createdDbSql];
        if (result) {
            NSLog(@"%@",@"创建数据库成功");
        }
    }
}

三:添加表内数据

//插入数据
-(void)saveFristReposted:(NSArray *)reposted{
    if ([db open]) {
        int _currentIndex = 0;
        for(Reposted * repos in reposted){
            _currentIndex += 1;
            repos.isRepost = 0;
            repos.dataTime = 0;
        NSString *queryString = [NSString stringWithFormat:@"select * from  t_reposted where feedId = ?"];
        [db beginTransaction];
        BOOL isRollBack = NO;
        @try {
            FMResultSet *set =[db executeQuery:queryString,repos.feedId];
            if([set next]){
                NSLog(@"已存在");
            }else{
                BOOL result = [db executeUpdate:@"INSERT INTO t_reposted values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" withArgumentsInArray:[self arrFromObject:repos]];
                if (result) {
                    NSLog(@"保存成功");
                }
            }
        }
        @catch (NSException *exception) {
            isRollBack = YES;
            [db rollback];
        }
        @finally {
            if (!isRollBack) {
                [db commit];
            }
        }
        
        }
    }
}
//模型转数组
- (NSMutableArray *)arrFromObject:(NSObject *)object {
    NSMutableArray *array = [NSMutableArray array];
    unsigned int count;
    objc_property_t *propertyList = class_copyPropertyList([object class], &count);
    
    for (int i = 0; i < count; i++) {
        objc_property_t property = propertyList[i];
        const char *cName = property_getName(property);
        NSString *name = [NSString stringWithUTF8String:cName];
        NSObject *value = [object valueForKey:name];//valueForKey返回的数字和字符串都是对象
        
        if ([value isKindOfClass:[NSString class]] || [value isKindOfClass:[NSNumber class]]) {
            //string , bool, int ,NSinteger
            [array addObject:value];
        }else{
            [array addObject:[NSNull null]];
           
        }
    }
    
    return [array copy];
}

四:获取表内数据
1.获取单个

-(BOOL)getdownStatus:(NSString *)feedId{
    bool kp = false;
    if ([db open]) {
        NSString *queryString = [NSString stringWithFormat:@"select * from  t_reposted where feedId = ?"];
        [db beginTransaction];
        BOOL isRollBack = NO;
        @try {
            FMResultSet *set =[db executeQuery:queryString,feedId];
            if([set next]){
                NSLog(@"已存在");
                if([set intForColumn:@"downStatus"]==3){
                    kp = true;
                }else{
                    [self deleteReposted:feedId];
                }
            }else{
               
            }
        }
        @catch (NSException *exception) {
            isRollBack = YES;
            [db rollback];
        }
        @finally {
            if (!isRollBack) {
                [db commit];
            }

        }
    }
    return kp;
}

2.获取所有

-(NSArray *)allReposted{
    NSMutableArray *array = [NSMutableArray array];
    NSMutableArray *array2 = [NSMutableArray array];
    if ([db open]) {
        NSString *queryString = [NSString stringWithFormat:@"select * from  t_reposted"];
        [db beginTransaction];
        BOOL isRollBack = NO;
        NSString *kkparentID = @"";
        @try {
            FMResultSet *set =[db executeQuery:queryString];
            if (set) {
                while ([set next]) {
                    Reposted *rep = [Reposted new];
                    rep.username = [set stringForColumn:@"username"];
                    rep.profile_pic_url = [set stringForColumn:@"profile_pic_url"];
                    rep.content = [set stringForColumn:@"content"];
                    rep.mediaType = [set intForColumn:@"mediaType"];
                    rep.thumbUrl = [set stringForColumn:@"thumbUrl"];
                    rep.saveUrl = [set stringForColumn:@"saveUrl"];
                    rep.downStatus = [set intForColumn:@"downStatus"];
                    rep.parentID = [set stringForColumn:@"parentID"];
                    rep.feedId = [set stringForColumn:@"feedId"];
                    rep.shortcode = [set stringForColumn:@"shortcode"];
                    rep.localIdentifier = [set stringForColumn:@"localIdentifier"];
                    if(![kkparentID isEqual:rep.parentID]){
                        kkparentID = rep.parentID;
                        if(array2.count==0){
                            [array2 addObject:rep];
                        }else{
                            [array addObject:array2];
                            array2 = [NSMutableArray array];
                            [array2 addObject:rep];
                        }
                    }else{
                        [array2 addObject:rep];
                    }
                    
                }
              
            }
          
        }@catch (NSException *exception) {
            isRollBack = YES;
            [db rollback];
        }
        @finally {
            if (!isRollBack) {
                [db commit];
            }
        }
        
    }
    if(array2.count>0){
        [array addObject:array2];
    }
    return array;
}

五:删除表内数据

-(BOOL)deleteReposted:(NSString *)feedId{
    BOOL ko = false;
    if ([db open]) {
        NSString *queryString = [NSString stringWithFormat:@"select * from  t_reposted where feedId = ?"];
        [db beginTransaction];
        BOOL isRollBack = NO;
        @try {
            FMResultSet *set =[db executeQuery:queryString,feedId];
            if([set next]){
                NSLog(@"已存在");
                BOOL success = [db executeUpdate:@"delete from t_reposted where feedId=?",feedId];
                ko = success;
            }else{
               
            }
        }
        @catch (NSException *exception) {
            isRollBack = YES;
            [db rollback];
        }
        @finally {
            if (!isRollBack) {
                [db commit];
            }

        }
    }
    return ko;
}

六:修改表内数据

-(void)setLocalIdentifier:(NSString *)localIdentifier FeedId:(NSString *)feedId{
    if ([db open]) {
        NSString *queryString = [NSString stringWithFormat:@"select * from  t_reposted where feedId = ?"];
        [db beginTransaction];
        BOOL isRollBack = NO;
        @try {
            FMResultSet *set =[db executeQuery:queryString,feedId];
            if([set next]){
                NSLog(@"已存在");
                [db executeUpdate:@"update t_reposted set localIdentifier = ? where feedId = ?",localIdentifier,feedId];
            }else{
               
            }
        }
        @catch (NSException *exception) {
            isRollBack = YES;
            [db rollback];
        }
        @finally {
            if (!isRollBack) {
                [db commit];
            }

        }
    }
}

相关文章

网友评论

      本文标题:iOS DB数据库

      本文链接:https://www.haomeiwen.com/subject/naaewltx.html