現在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
view source
print?
01.
#import
02.
03.
@inte***ce userentity : nsobject
04.
09.
10.
@property (nonatomic, assign)
int
id;
11.
@property (nonatomic, retain) nsstring *
name
;
12.
@property (nonatomic, retain) nsstring *
password
;
13.
@
end
3. 建立運算元據庫的dao
view source
print?
01.
//
02.
// dbdao.m
03.
// sqlitetest
04.
//
05.
// created by foxwang on 12-4-9.
06.
07.
//
08.
09.
#
import
"dbdao.h"
10.
#
import
"dbfilemanager.h"
11.
12.
#
import
"fmdatabase.h"
13.
#
import
"fmdatabaseadditions.h"
14.
#
import
"fmdatabasepool.h"
15.
#
import
"fmdatabasequeue.h"
16.
#
import
"userentity.h"
17.
18.
static
dbdao *gsharedinstance = nil;
19.
20.
@implementation
dbdao
21.
@synthesize
dbfile;
22.
@synthesize
dbqueue;
23.
24.
+(dbdao *)sharedinstance
25.
31.
return
gsharedinstance;
32.
}
33.
34.
- (
void
)dealloc
35.
40.
41.
- (id)init
42.
52.
return
self;
53.
}
54.
55.
- (userentity *)rstouser:(fmresultset*)rs
56.
63.
64.
- (
void
)adduser:(userentity *)user
65.
];
72.
}
73.
74.
- (nsarray *)getusers;
75.
85.
[db close];
86.
}];
87.
return
users;
88.
}
89.
@end
4. 編寫測試方法
在didfinishlaunchingwithoptions 方法裡啟動3個執行緒 :2個執行緒寫,1個執行緒讀
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...