#準備工作 在當前類的延展中宣告一個資料庫的物件
@interface RootViewController ()
@property (strong, nonatomic)FMDatabase *db;
@end
複製程式碼
建立一個資料庫的路徑
- (NSString *)dbPath{
NSString *dbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES)firstObject] stringByAppendingPathComponent:@"FMDB.sqlite"];
return dbPath;
}
複製程式碼
開啟或者建立一個資料庫
- (FMDatabase *)openOrCreate{
//建立資料庫物件
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
self.db = [FMDatabase databaseWithPath:[self dbPath]];
});
if ([self.db open]) {
return self.db;
}else {
NSLog(@"開啟失敗");
return nil;
}
}
複製程式碼
##FMDB之無返回結果集 一切不是SELECT命令的命令都視為更新。這包括 CREATE, UPDATE, INSERT,ALTER,COMMIT, BEGIN, DETACH, DELETE, DROP, END, EXPLAIN, VACUUM, and REPLACE (等)。簡單來說,只要不是以SELECT開頭的命令都是UPDATE命令,也就是無返回結果集。 示例程式碼
- (BOOL)opertationNoResultWithSql:(NSString *)sql operationTag:(NSString *)tag{
//開啟資料庫
FMDatabase *db = [self openOrCreate];
//執行非查詢操作
BOOL isSuccess = [db executeUpdate:sql];
//當操作完成後,關閉資料路
[self.db close];
if (isSuccess) {
NSLog(@"%@操作成功",tag);
return YES;
}else{
NSLog(@"%@操作失敗",tag);
return NO;
}
}
複製程式碼
##FMDB之有返回結果集
- SELECT命令就是查詢,執行查詢的方法是以 -excuteQuery開頭的。
- 執行查詢時,如果成功返回FMResultSet物件, 錯誤返回nil. 與執行更新相當,支援使用 NSError**引數。同時,你也可以使用 -lastErrorCode和-lastErrorMessage獲知錯誤資訊。
- 為了遍歷查詢結果,你可以使用while迴圈。你還需要知道怎麼跳到下一個記錄。使用FMDB,很簡單實現。
示例程式碼
- (NSArray *)queryWithSql:(NSString *)sql{
//開啟資料庫
FMDatabase *db = [self openOrCreate];
//執行sql語句,將返回結果先暫存到resultSet中
FMResultSet *resultSet = [db executeQuery:sql];
//從resultSet中取出每一條記錄
NSMutableArray *array = [NSMutableArray array];
while ([resultSet next]) {//next:判斷sqlite3_step(stament) == row
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
/*每次執行while迴圈的時候,都是一個新的記錄被取出,所以我們需要一個新的字典來盛放新的記錄,
所以每次進while迴圈的時候都需要構建一個新的字典物件。*/
NSString *name = [resultSet stringForColumn:@"name"];
NSString *gender = [resultSet stringForColumn:@"gender"];
NSInteger age = [resultSet intForColumn:@"age"];
[dic setValue:name forKey:@"name"];
[dic setValue:gender forKey:@"gender"];
[dic setValue:@(age) forKey:@"age"];
[array addObject:dic];
}
//釋放resultSet
[resultSet close];
//關閉資料庫
[db close];
return array;
}
複製程式碼