国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

iOS開發-數據篇-sqlite存儲

2019-11-14 18:30:43
字體:
來源:轉載
供稿:網友

簡介:iOS開發的持久化數據存儲有4種方式:NSUserDefault.plistNSKeyedArchiverNSKeyedUnarchiversqlite3數據庫CoreData

sqlite3CoreData適合存儲大量數據(內容數據等),而另外兩種適合存儲簡單數據(語言,字體,標記等簡單數據存儲)

準備:這里主要介紹利用sqlite3封裝的FMDatabase的數據庫,(當然還有PlausibleDatabasesqlitepersistentobjects等其他封裝的庫),導入需要依賴的libsqlite3.dylib,FMDatabase已經根據工程不同情況兼容ARC和非ARC。為了只針對數據庫進行講解,直接創建一個簡單工程,導入FMDatabase庫。

內容:1.創建數據庫

#import <UIKit/UIKit.h>#import "FMDatabase.h"#import "FMDatabaseQueue.h"@interface ViewController : UIViewController{    FMDatabase *db;    FMDatabaseQueue *queue_db;}
//創建數據庫文件路徑- (NSString*)getPath{    NSArray* paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) ;    return [[paths objectAtIndex:0]stringByAppendingPathComponent:@"TEST.sqlite"] ;}

2.數據庫的建表-增-刪-改操作

- (void)viewDidLoad {    [super viewDidLoad];        [self executeSql:[self createTable]];//創表    [self executeSql:[self insertData]];//    [self executeSql:[self deleteData]];//    [self executeSql:[self setData]];////    [self queryData];    //開辟多線程    [NSThread detachNewThreadSelector:@selector(multipleThread) toTarget:self withObject:nil];    }
//創建數據庫-(NSString *)createTable{    NSString *createSql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS TEST(a interger,b text)"];    return createSql;}//- (NSString *)insertData{    NSString *insertSql= [NSString stringWithFormat:                          @"INSERT INTO '%@' ('%@', '%@') VALUES ('%@', '%@')",                          @"TEST", @"a", @"b", [NSNumber numberWithInt:1], @"寧波"];    return insertSql;}//- (NSString *)deleteData{    NSString *deleteSql = [NSString stringWithFormat: @"DELETE FROM '%@' where %@ = '%@'",                           @"TEST", @"b", @"寧波"];    return deleteSql;}//-(NSString *)setData{    NSString *setSql = [NSString stringWithFormat:@"UPDATE '%@' SET '%@' = '%@' WHERE '%@' = '%@'",                        @"TEST", @"b",  @"象山" ,@"a",  [NSNumber numberWithInt:1]];    return setSql;}

3.數據庫的執行操作

//數據庫執行操作-(BOOL)executeSql:(NSString *)sql{    db = [FMDatabase databaseWithPath:[self getPath]];    BOOL success;    if ([db open]) {        success  = [db executeUpdate:sql];    }else{        NSLog(@"OPEN FAIL");    }    [db close];    return success;}

4.數據庫的查詢操作

//-(void)queryData{    if ([db open]) {        NSString *querySql = [NSString stringWithFormat:                              @"SELECT * FROM %@",@"TEST"];        FMResultSet * rs = [db executeQuery:querySql];        while ([rs next]) {            int a = [rs intForColumn:@"a"];            NSString *b = [rs stringForColumn:@"b"];            NSLog(@"a:%d  == b:%@",a,b);        }                [db close];    }}

5.數據庫的多線程操作

若在多線程的環境下,不能在多線程中共用同一個FMDatabase進行數據訪問,會造成數據混亂,多線程下不能用單例對象,這時得依靠FMDatabaseQueue。

//多線程下使用FMDatabaseQueue進行數據庫操作-(void)multipleThread{    queue_db = [FMDatabaseQueue databaseQueueWithPath:[self getPath]];    @autoreleasepool{        [queue_db inDatabase:^(FMDatabase *db2) {            [db2 executeUpdate:[self insertData]];            [self queryData];        }];    }}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开封县| 泗阳县| 三亚市| 牙克石市| 潼关县| 吉木乃县| 苗栗县| 新宾| 静安区| 忻城县| 成都市| 德江县| 雷波县| 息烽县| 济宁市| 沧州市| 托里县| 台南县| 铜陵市| 湟中县| 望谟县| 阳曲县| 嵊泗县| 四川省| 塘沽区| 郧西县| 台东县| 清涧县| 环江| 余庆县| 乌恰县| 石嘴山市| 房山区| 沙河市| 安塞县| 新河县| 新野县| 左贡县| 城市| 白城市| 咸宁市|