現在ios裡使用的資料庫一般都是sqlite,但是使用sqlite有個不太好的地方就是在多執行緒的時候,會出現問題,sqlite只能開啟乙個讀或者寫鏈結。這樣的話多執行緒就會碰到資源占用的問題。
最開始是使用fmdb,fmdb的早期版本不能解決這個問題,後來fmdb更新了,新版本的fmdb能夠很好的解決這個多執行緒使用sqlite 。
本文演示了使用fmdb通過多執行緒來讀和寫資料庫操作。
1.建立資料庫表,我採用的是firefox的sqlite manager 來建立的。
建表sql如下
create
table "tbl_user" ("_id" integer
primary
key autoincrement not
null , "name" varchar(30), "password" varchar(30))
2. 建立資料表的對映實體userentity
#import
@inte***ce userentity : nsobject
@property (nonatomic, assign)
int id;
@property (nonatomic, retain) nsstring *name;
@property (nonatomic, retain) nsstring *password;
@end
3. 建立運算元據庫的dao
////sqlitetest
////
created by foxwang on 12-4-9.
////
#import
"dbdao.h
"#import
"dbfilemanager.h
"#import
"fmdatabase.h
"#import
"fmdatabaseadditions.h
"#import
"fmdatabasepool.h
"#import
"fmdatabasequeue.h
"#import
"userentity.h
"static dbdao *gsharedinstance = nil;
@implementation dbdao
@synthesize dbfile;
@synthesize dbqueue;
+(dbdao *)sharedinstance
return gsharedinstance; }
- (void)dealloc
- ( id)init
return self; }
- (userentity *)rstouser:(fmresultset*)rs
- ( void)adduser:(userentity *)user
]; }
- (nsarray *)getusers;
[db close];
}];return users; }
@end
4. 編寫測試方法
在didfinishlaunchingwithoptions 方法裡啟動3個執行緒 :2個執行緒寫,1個執行緒讀
- (void)writedbone
} }
- ( void)writedbtwo
} }
- ( void)readdb
IOS多執行緒讀寫Sqlite問題解決
現在ios裡使用的資料庫一般都是sqlite,但是使用sqlite有個不太好的地方就是在多執行緒的時候,會出現問題,sqlite只能開啟乙個讀或者寫鏈結。這樣的話多執行緒就會碰到資源占用的問題。最開始是使用fmdb,fmdb的早期版本不能解決這個問題,後來fmdb更新了,新版本的fmdb能夠很好的解...
解決IOS多執行緒讀寫Sqlite問題解決
現在ios裡使用的資料庫一般都是sqlite,但是使用sqlite有個不太好的地方就是在多執行緒的時候,會出現問題,sqlite只能開啟乙個讀或者寫鏈結。這樣的話多執行緒就會碰到資源占用的問題。最開始是使用fmdb,fmdb的早期版本不能解決這個問題,後來fmdb更新了,新版本的fmdb能夠很好的解...
SQLite 多執行緒
sqlite支援3種執行緒模式 單執行緒 這種模式下,沒有進行互斥,多執行緒使用不安全。禁用所有的mutex鎖,併發使用時會出錯。當sqlite編譯時加了sqlite threadsafe 0引數,或者在初始化sqlite前呼叫sqlite3 config sqlite config singlet...