標籤:
FMDB是ios平台下解析sqlite的第三方資料庫管理架構,使用非常方便,而且提供了多安全執行緒的資料庫操作,相比coredata來說更加靈活和輕量級。
fmdb主要有三個類別:
fmdatabase:用來執行sql語句;
fmresultset:用來使用fmdatabase執行查詢後的結果集合
fmdatabasequeue:用來在多線程中查詢和更新資料,它是安全執行緒的。
fmdb的使用
1.在建立的項目中,匯入libsqlite3的動態資料庫:
註:(在Building Phases中的Link Binary WithLibraries中添加)
2.加入第三方架構fmdb中的這些主要檔案:
3.在代碼中建立一個資料庫,並指定檔案路徑:
1 //指定沙箱路徑 2 NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 3 //在指定沙箱路徑下添加sqlite檔案 4 NSString *filepath = [path stringByAppendingPathComponent:@"moxue.sqlite"]; 5 //在指定path路徑下建立資料庫 6 FMDatabase *db = [FMDatabase databaseWithPath:filepath]; 7 //查看是否開啟成功 8 if (![db open]) { 9 return;10 }else{11 NSLog(@"開啟成功");12 }
4.在代碼中添加列表和列表屬性:
1 //在資料庫中建立一個列表,並添加列表屬性2 BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS data(id INTEGER PRIMARY KEY AUTOINCREMENT,Title TEXT,date TEXT,Context TEXT,Url TEXT)"];3 if (result) {4 NSLog(@"建立data表成功");5 }else{6 NSLog(@"建立data表失敗");7 }
5.在列表中插入資料:
1 //插入資料2 BOOL res = [db executeUpdate:@"INSERT INTO data (Title,date,Context,Url) VALUES(?,?,?,?)",@"墨雪",@"2015-10-11",@"我的表格",@"我的Url"];3 BOOL res1 = [db executeUpdate:@"INSERT INTO data (Title,date,Context,Url) VALUES(?,?,?,?)",@"劉慶",@"2015-10-10",@"劉慶的表格",@"劉慶的Url"];4 if (res1) {5 NSLog(@"插入data成功");6 }else{7 NSLog(@"插入data表失敗");8 }
6.在類表中刪除資料或者列表:
1 BOOL dele = [db executeUpdate:@"DROP TABLE IF EXISTS data"];2 BOOL dele1 = [db executeUpdate:@"delete from data where Title = ‘墨雪‘"];3 if (dele) {4 NSLog(@"刪除資料成功");5 }else{6 NSLog(@"刪除資料失敗");7 }
7.在列表中修改資料:
1 //修改資料2 BOOL UPDATE = [db executeUpdate:@"update data SET Title = ‘哈哈‘ WHERE id = 1" ];3 if (UPDATE) {4 NSLog(@"修改成功");5 }else{6 NSLog(@"修改失敗");7 }
8.在列表中查詢資料:
1 //查詢資料2 FMResultSet *RS = [db executeQuery:@"SELECT Title from data"];3 while ([RS next]) {4 NSString *name = [RS stringForColumn:@"Title"];5 NSLog(@"%@",name);6 }
9. 如果應用中使用了多線程操作資料庫,那麼就需要使用FMDatabaseQueue來保證安全執行緒了。 應用中不可在多個線程中共同使用一個FMDatabase對象操作資料庫,這樣會引起資料庫資料混亂。 為了多線程操作資料庫安全,FMDB使用了FMDatabaseQueue,使用FMDatabaseQueue很簡單,首先用一個資料庫檔案地址來初使化FMDatabaseQueue,然後就可以將一個閉包(block)傳入inDatabase方法中。 在閉包中操作資料庫,而不直接參与FMDatabase的管理。
1 FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:filepath]; 2 dispatch_queue_t myq1 = dispatch_queue_create("myqueue1", nil); 3 dispatch_async(myq1, ^{ 4 [queue inDatabase:^(FMDatabase *db) { 5 FMResultSet *RS = [db executeQuery:@"SELECT Title from data"]; 6 while ([RS next]) { 7 NSString *name = [RS stringForColumn:@"Title"]; 8 NSLog(@"%@",name); 9 }10 11 }];12 });
10.關閉資料庫
1 [db close];
11.另外 FMResultSet 還提供了很多方法來獲得所需的格式的值:
intForColumn: longForColumn: longLongIntForColumn: boolForColumn: doubleForColumn: stringForColumn: dataForColumn: dataNoCopyForColumn: UTF8StringForColumnIndex: objectForColumn:
sqlite第三方類庫fmdb的使用