IOS操作數據庫,SQLite3和coredata是兩個非常好的選擇,但是對於我們這些掌握了其他數據庫語言的人來說,使用這兩中操作都 會覺得不方便,SQLite3使用起來太複雜了,而使用coredata的時候卻封裝太死了,我們需要自己些自己的數據庫語句,這時候,FMDB就是一個 非常不錯的選擇!
什麼是FMDB
FMDB是iOS平臺的SQLite數據庫框架 FMDB以OC的方式封裝了SQLite的C語言API
FMDB的優點
使用起來更加面向對象,省去了很多麻煩、冗餘的C語言代碼 對比蘋果自帶的Core Data框架,更加輕量級和靈活 提供了多線程安全的數據庫操作方法,有效地防止數據混亂
FMDB有三個主要的類
①FMDatabase一個FMDatabase對象就代表一個單獨的SQLite數據庫 用來執行SQL語句
②FMResultSet使用FMDatabase執行查詢後的結果集
③FMDatabaseQueue用於在多線程中執行多個查詢或更新,它是線程安全的
————————————————————————
具體使用
1、導入頭文件
#import "FMDatabase.h"
2、定義成員變量
FMDatabase* _db;
3、創建數據庫.db文件
NSString* path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/data.db"];
4、用path路徑初始化FMDatabase
_db = [[FMDatabase alloc] initWithPath:path];
5、打開數據庫[_db open]
//打開數據庫
BOOL res = [_db open];
if (res == NO) {
NSLog(@"打開失敗");
return;
}
6、創建表
res = [_db executeUpdate:@"create table if not exists USER(id integer primary key autoincrement,name,score,p_w_picpath)"];
if (res == NO) {
NSLog(@"創建表失敗");
}
7、關閉數據庫
[_db close];
8、增加操作
//FMDB支持類型 NSString NSNumber NSData
將數據轉化爲能夠存儲進數據庫的類型
NSData* p_w_picpathData = UIImagePNGRepresentation(_p_w_picpathView.p_w_picpath);
NSString* name = _nameField.text;
NSNumber* score = [NSNumber numberWithInt:[_scoreField.text intValue]];
//打開數據庫
BOOL res = [_db open];
if (res == NO) {
NSLog(@"打開失敗");
}
//插入數據
res = [_db executeUpdate:@"insert into USER(name,score,p_w_picpath) values(?,?,?)", name, score, p_w_picpathData];
if (res == NO) {
NSLog(@"插入數據失敗");
}
[_db close];
9、刪除操作
//刪
- (void)del:(id)sender{
BOOL res = [_db open];
if (res == NO) {
NSLog(@"打開失敗");
return;
}
res = [_db executeUpdate:@"delete from USER where name=?", _nameField.text];
if (res == NO) {
NSLog(@"刪除失敗");
}
[_db close];
}
10、查詢操作
//查
- (void)fetch:(id)sender{
BOOL res = [_db open];
if (res == NO) {
NSLog(@"打開失敗");
return;
}
FMResultSet* set = [_db executeQuery:@"select * from USER"];
while ([set next]) {
//取值
NSString* name = [set stringForColumn:@"name"];
int score = [set intForColumn:@"score"];
NSData* data = [set dataForColumn:@"p_w_picpath"];
NSLog(@"%@ --- %d", name, score);
//[set objectForColumnName:@"score"];
}
[_db close];
}
——————————————————————————————————————
多線程管理FMDB:
FMDatabase這個類是線程不安全的,如果在多個線程中同時使用一個FMDatabase實例,會造成數據混亂等問題
爲了保證線程安全,FMDB提供方便快捷的FMDatabaseQueue類
使用FMDatabaseQueue很簡單,首先用一個數據庫文件地址來初使化FMDatabaseQueue,然後就可以將一個閉包(block)傳入inDatabase方法中。在閉包中操作數據庫,而不直接參與FMDatabase的管理。
FMDatabaseQueue的創建
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];
簡單使用 [queue inDatabase:^(FMDatabase *db) {
[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]) {
// …
}
}];
FMDB數據庫
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
十進制轉十六進制的C語言實現
OnlyOpera
2019-02-23 13:37:36
C語言指針函數和函數指針
窈窕魑魅
2019-02-23 13:14:47
C語言中的FILE結構
窈窕魑魅
2019-02-23 13:14:46
C語言改寫的飛機小遊戲
計科150809212
2019-02-23 12:53:25
Redis 學習筆記
jasonhow
2019-02-23 00:39:36
C語言變量存儲類型auto static extern static extern register
nickybeidi
2019-02-23 00:34:31
java性能優化筆記(二)設計優化
kid2412
2019-02-24 13:34:37
java多線程之Semaphore信號量詳解
ketqi
2019-02-23 13:33:26
Java多線程之ExecutorService
myfuxing
2019-02-23 13:14:09
java多線程之fork/join框架詳解
ketqi
2019-02-23 12:57:20
java多線程之CountDownLatch倒數閘門
ketqi
2019-02-23 12:57:05