解決IOS多執行緒讀寫Sqlite問題解決

2021-06-29 02:06:18 字數 1910 閱讀 4645

現在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 {

dbdao *dao = [dbdao  sharedinstance];

nsarray *users =   [dao getusers];

nslog(

@"%@

", users);

IOS多執行緒讀寫Sqlite問題解決

現在ios裡使用的資料庫一般都是sqlite,但是使用sqlite有個不太好的地方就是在多執行緒的時候,會出現問題,sqlite只能開啟乙個讀或者寫鏈結。這樣的話多執行緒就會碰到資源占用的問題。最開始是使用fmdb,fmdb的早期版本不能解決這個問題,後來fmdb更新了,新版本的fmdb能夠很好的解...

IOS多執行緒讀寫Sqlite問題解決

現在ios裡使用的資料庫一般都是sqlite,但是使用sqlite有個不太好的地方就是在多執行緒的時候,會出現問題,sqlite只能開啟乙個讀或者寫鏈結。這樣的話多執行緒就會碰到資源占用的問題。最開始是使用fmdb,fmdb的早期版本不能解決這個問題,後來fmdb更新了,新版本的fmdb能夠很好的解...

多執行緒讀寫mysql 多執行緒讀寫mysql資料庫

該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓 unsigned int stdcall scan pvoid pm char ip 20 strcpy ip,char pm mysql mysql mysql res result 初始化mysql控制代碼 mysql init mysql 連線my...