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

2021-06-28 03:12:11 字數 1777 閱讀 7819

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