FMDB使用介紹

作者: shaneZhang 分類: ios技術 發布時間: 2014-12-11 11:12

什麼是FMDB 
FMDB是iOS平台的SQLite資料庫框架 
FMDB以OC的方式封裝了SQLite的C語言API

FMDB的優點 
使用起來更加面向對象,省去了很多麻煩、冗餘的C語言代碼 
對比蘋果自帶的Core Data框架,更加輕量級和靈活 
提供了多線程安全的資料庫操作方法,有效地防止數據混亂

FMDB的github地址 
https://github.com/ccgus/fmdb


廢話少說,下面來介紹FMDB的使用吧 
FMDB有三個主要的類 
FMDatabase 
一個FMDatabase對象就代表一個單獨的SQLite資料庫 
用來執行SQL語句

FMResultSet 
使用FMDatabase執行查詢後的結果集

FMDatabaseQueue 
用於在多線程中執行多個查詢或更新,它是線程安全的


下面來打開資料庫 ,一般都需要資料庫的路徑地址:path 
通過指定SQLite資料庫文件路徑來創建FMDatabase對象 
FMDatabase *db = [FMDatabase databaseWithPath:path]; 
if (![db open]) {

?
1
NSLog(@”資料庫打開失敗!”);

}

path文件路徑有三種情況 
1,具體文件路徑 
如果不存在會自動創建 
2,空字元串@「」 
會在臨時目錄創建一個空的資料庫 
當FMDatabase連接關閉時,資料庫文件也被刪除 
3,nil 
會創建一個內存中臨時資料庫,當FMDatabase連接關閉時,資料庫會被銷毀


CURD操作: 
在FMDB中,除查詢以外的所有操作,都稱為「更新」 
create、drop、insert、update、delete等

使用executeUpdate:方法執行更新

  • (BOOL)executeUpdate:(NSString*)sql, …
  • (BOOL)executeUpdateWithFormat:(NSString*)format, …
  • (BOOL)executeUpdate:(NSString)sql withArgumentsInArray:(NSArray )arguments

示例 
[db executeUpdate:@「UPDATE t_student SET age = ? WHERE name = ?;「, @20, @「Jack」]

查詢方法

  • (FMResultSet )executeQuery:(NSString)sql, …
  • (FMResultSet )executeQueryWithFormat:(NSString)format, …
  • (FMResultSet )executeQuery:(NSString )sql withArgumentsInArray:(NSArray *)arguments

示例 
// 查詢數據 
FMResultSet *rs = [db executeQuery:@「SELECT * FROM t_student」];

// 遍歷結果集 
while ([rs next]) {

?
1
2
3
NSString *name = [rs stringForColumn:@”name”];
intage = [rs intForColumn:@”age”];
doublescore = [rs doubleForColumn:@”score”];

}


多線程管理FMDB 
FMDatabase這個類是線程不安全的,如果在多個線程中同時使用一個FMDatabase實例,會造成數據混亂等問題

為了保證線程安全,FMDB提供方便快捷的FMDatabaseQueue類

FMDatabaseQueue的創建 
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];

簡單使用 
[queue inDatabase:^(FMDatabase *db) {

?
1
2
3
4
5
6
7
8
[db executeUpdate:@”INSERT INTO t_student(name) VALUES (?)”, @”Jack”];
[db executeUpdate:@”INSERT INTO t_student(name) VALUES (?)”, @”Rose”];
[db executeUpdate:@”INSERT INTO t_student(name) VALUES (?)”, @”Jim”];
 
FMResultSet *rs = [db executeQuery:@”select * from t_student”];
while([rs next]) {
    // …
}

}];

使用事務 
[queue inTransaction:^(FMDatabase db, BOOL rollback) {

?
1
2
3
4
5
6
7
8
[db executeUpdate:@”INSERT INTO t_student(name) VALUES (?)”, @”Jack”];
[db executeUpdate:@”INSERT INTO t_student(name) VALUES (?)”, @”Rose”];
[db executeUpdate:@”INSERT INTO t_student(name) VALUES (?)”, @”Jim”];
 
FMResultSet *rs = [db executeQuery:@”select * from t_student”];
while([rs next]) {
    // …
}

}];

事務回滾 
*rollback = YES;

本頁面支持繁體中文友好顯示:FMDB使用介紹

如果覺得我的文章對您有用,請隨意打賞。如果有其他問題請聯繫博主QQ(909491009)或者下方留言!

發表評論

電子郵件地址不會被公開。 必填項已用*標註