iOS | FMDB快速上手
阿新 • • 發佈:2018-12-11
任何的開發都或多或少的接觸到資料庫,而在IOS中一般使用的是SQLite資料庫,這是一個輕量功能較為不錯的資料庫.而現在用到比較多的第三方資料庫操作框架就是FMDB.廢話不多說,相信查詢到這篇文章的都是已經上手的IOS開發者,直接上一些相關使用.
提供git地址點選這裡.
首先簡單介紹下
實現客戶端資料庫操作的第三方框架.
操作資料庫的類 : FMDatabase.h
佇列排程資料庫執行的類 : FMDatabaseQueue.h
查詢資料的類 : FMResultSet.h
注意
第三方的官方文件是這麼說的:
FMDatabaseQueue - If you're wanting to perform queries and updates on multiple threads, you'll want to use this class. It's described in the "Thread Safety" section below.
翻譯:如果你像去實現查詢和更新在多執行緒上,你就是用這個類,這個是建立線上程安全之上的.
做法:一般自行封裝成一個工具類,設計成單例.
目的:全域性只有一個序列佇列,這樣操作資料庫更加安全.
先建立.h檔案
@interface FMDatabaseQueueManager : FMDatabaseQueue
//提供單例入口
+ (instancetype)sharedManager;
@end
在.m檔案中實現方法,建立一個數據庫
+(instancetype)sharedManager{ static FMDatabaseQueueManager *instance; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // 1.獲取資料庫路徑,將要把資料庫存到這個路徑中. NSString *SQLPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"my.db"]; // 2. 建立管理資料庫物件 instance = [FMDatabaseQueueManager databaseQueueWithPath:SQLPath]; }); return instance; }
新建表
[[FMDatabaseQueueManager sharedManager] inDatabase:^(FMDatabase *db) {
BOOL isCreate = [db executeUpdate:@"create table if not exists t_person(id integer primary key,name text not null,age integer);"];
使用事務插入資料
// 1.定義SQL語句 NSString *insertSQL = @"insert into t_person(name,age) values(?,?);"; // 2.佇列排程資料庫,使用事務插入資料,效能比原生SQLite3要好 [[FMDatabaseQueueManager sharedManager] inTransaction:^(FMDatabase *db, BOOL *rollback) { // 3.迴圈新增大批量的資料 for (NSInteger i = 0; i < 1000; i++) { // 4.執行SQL BOOL isOK = [db executeUpdate:insertSQL,@"張三",@(100)]; // 出錯就回滾 if (!isOK) { // 回滾快照 *rollback = YES; // 非常重要 break; } } }];
查詢資料
// 1.定義SQL語句
NSString *updateSQL = @"select name,age from t_person;";
// 2.佇列排程資料庫
[[FMDatabaseQueueManager sharedManager] inDatabase:^(FMDatabase *db) {
// 3.執行SQL
FMResultSet *resultSet = [db executeQuery:updateSQL];
// 4.逐條取記錄
while ([resultSet next]) {
NSString *name = [resultSet stringForColumn:@"name"];
int age = [resultSet intForColumn:@"age"];
NSLog(@"%@ -- %d",name,age);
}
}];
刪除資料
// 1.定義SQL語句
NSString *updateSQL = @"delete from t_person where id = ?;";
// 2.佇列排程資料庫
[[FMDatabaseQueueManager sharedManager] inDatabase:^(FMDatabase *db) {
// 3.執行SQL
BOOL isOK = [db executeUpdate:updateSQL,@(6)];
if (isOK) {
NSLog(@"刪除資料成功");
} else {
NSLog(@"刪除資料失敗");
}
}];
修改資料
// 1.定義SQL語句
NSString *updateSQL = @"update t_person set name = ?,age = ? where id = ?;";
// 2.佇列排程資料庫
[[FMDatabaseQueueManager sharedManager] inDatabase:^(FMDatabase *db) {
// 3.執行SQL
BOOL isOK = [db executeUpdate:updateSQL,@"王五",@(19),@(3)];
if (isOK) {
NSLog(@"更新資料成功");
} else {
NSLog(@"更新資料失敗");
}
NSLog(@"影響行數 %d", db.changes);
}];