FMDB中FMDatabaseQueue簡單使用筆記及錯誤整理
阿新 • • 發佈:2018-12-22
FMDB是什麼
專案需要資料本地快取,所以想到了使用本地資料庫。iOS的本地資料庫就是SQLite,而FMDB就是一個Objective-C編寫的SQLite封裝庫。
FMDB的匯入及使用
1.FMDB地址:Github地址
2.使用Cocoapods匯入,只需要在Podfile中新增pod 'FMDB',然後pod install
FMDatabaseQueue
資料庫建立
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *filePath = [docPath stringByAppendingPathComponent:[NSString stringWithFormat:@"my.sql"]]; NSLog(@"%@",filePath); _queueDB = [FMDatabaseQueue databaseQueueWithPath:filePath];
表的建立
[_queueDB inDatabase:^(FMDatabase * _Nonnull db) { BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS myInfo (myId integer PRIMARY KEY AUTOINCREMENT,myName text NOT NULL)"]; if (result) { NSLog(@"建立表myInfo成功"); }else{ NSLog(@"建立表myInfo失敗"); } }];
新增資料
[_queueDB inDatabase:^(FMDatabase * _Nonnull db) {
BOOL result = [db executeUpdate:@"INSERT INTO myInfo (myId,myName) VALUES (?,?)",@1,@"yu"];
if (result) {
NSLog(@"表myInfo新增資料成功");
}else{
NSLog(@"表myInfo新增資料失敗");
}
}];
新增資料,如果已經存在就更新
[_queueDB inDatabase:^(FMDatabase * _Nonnull db) {
BOOL result = [db executeUpdate:@"REPLACE INTO myInfo (myId,myName) VALUES (?,?)",@1,@"yu"];
if (result) {
NSLog(@"表myInfo新增資料成功");
}else{
NSLog(@"表myInfo新增資料失敗");
}
}];
查詢資料
[_queueDB inDatabase:^(FMDatabase * _Nonnull db) {
FMResultSet *set = [db executeQuery:@"SELECT myName FROM myInfo WHERE myId = ?",@1];
while ([set next]) {
NSString *name = [set intForColumn:@"myName"];
NSLog(@"%@",name);
}
[set close];
}];
事務的使用
[myDB.queueDB inTransaction:^(FMDatabase * _Nonnull db, BOOL * _Nonnull rollback) {
BOOL result = [db executeUpdate:@"INSERT INTO curveInfo (m yId,myName) VALUES (?,?)",@1,@""];
if (!result) {
*rollback = YES;
return;
}
}];
錯誤總結
- 進入下面語句並報錯崩潰
else if (args) {
obj = va_arg(args, id);
}
解決 :進行INSERT操作時不能插入簡單資料型別(int, long等),必須轉化為NSNumber類,如下:
[NSNumber numberWithInt:1]