iOS開發-資料篇-sqlite儲存

來源:互聯網
上載者:User

標籤:

簡介:iOS開發的持久化資料存放區有4種方式:NSUserDefault和.plist、NSKeyedArchiver和NSKeyedUnarchiver、sqlite3資料庫、CoreData。

sqlite3和CoreData適合儲存大量資料(內容資料等),而另外兩種適合儲存簡單資料(語言,字型,標記等簡單資料存放區)。

準備:這裡主要介紹利用sqlite3封裝的FMDatabase的資料庫,(當然還有PlausibleDatabase、sqlitepersistentobjects等其他封裝的庫),匯入需要依賴的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];        }];    }}

 

iOS開發-資料篇-sqlite儲存

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.