寫(xiě)一個(gè)FMDB的分類(lèi)?
#import<FMDB.h>
+(instancetype)sharedDataBase{
? ? staticDataBase*_DBCtl =nil;
? ? if(_DBCtl ==nil) {
? ? ? ? _DBCtl = [[DataBasealloc]init];
? ? ? ? [_DBCtlinitDataBase];
? ? }
? ? return_DBCtl;
}
創(chuàng)建表格
-(void)initDataBase{
? ? // 獲得Documents目錄路徑
? ? NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
? ? // 文件路徑
? ? NSString*filePath = [documentsPathstringByAppendingPathComponent:@"model.sqlite"]; ? ?// 實(shí)例化FMDataBase對(duì)象
? ? _db= [FMDatabasedatabaseWithPath:filePath];
? ? [_dbopen];
? ? // 初始化數(shù)據(jù)表
? ? NSString *personSql = @"CREATE TABLE 'person' ('id' INTEGER PRIMARY KEY AUTOINCREMENT? NOT NULL ,'person_id' integer,'person_name' text,'person_age' integer,'person_number'integer) ";
? ? NSString *carSql = @"CREATE TABLE 'car' ('id' INTEGER PRIMARY KEY AUTOINCREMENT? NOT NULL ,'own_id' integer,'car_id' integer,'car_brand' text,'car_price' real) ";
? ? [_dbexecuteUpdate:personSql];
? ? [_dbexecuteUpdate:carSql];
? ? [_dbclose];
}
另外SQLite 存儲(chǔ)數(shù)據(jù)的類(lèi)型:
數(shù)據(jù)類(lèi)型描述
NULL (null)值是一個(gè) NULL 值
INTEGER (integer)值是一個(gè)帶符號(hào)的整數(shù),根據(jù)值的大小存儲(chǔ)在1、2、3、4、6 或 8 字節(jié)中
REAL (real)值是一個(gè)浮點(diǎn)值,存儲(chǔ)為 8 字節(jié)的 IEEE 浮點(diǎn)數(shù)字
TEXT (text)值是一個(gè)文本字符串,使用數(shù)據(jù)庫(kù)編碼UTF-8、UTF-16BE 或 UTF-16LE)存儲(chǔ)
BLOB (blob)值是一個(gè) blob 數(shù)據(jù),完全根據(jù)它的輸入存儲(chǔ)
BooleanSQLite 沒(méi)有單獨(dú)的 Boolean 存儲(chǔ)類(lèi)。相反,布爾值被存儲(chǔ)為整數(shù) 0(false)和 1(true)
曾:
?[_dbopen];
[_db executeUpdate:@"INSERT INTO person(person_id,person_name,person_age,person_number)VALUES(?,?,?,?)",maxID,person.name,@(person.age),@(person.number)];
?[_db close];
刪:
[_dbopen];
?[_db executeUpdate:@"DELETE FROM person WHERE person_id = ?",person.ID];
?[_db close];
其實(shí)我更喜歡用FMDatabaseQueue 因?yàn)樗蔷€程安全的,我用FMDatabaseQueue寫(xiě)一個(gè)插入1000條數(shù)據(jù)的方法,先附上圖一張,當(dāng)然也可以用事物來(lái)做,大神看到,哪里不足還望指正。
- (FMDatabaseQueue *)dbQueue{
? ? if(!_dbQueue) {
? ? ? ? _dbQueue = [FMDatabaseQueue databaseQueueWithPath:@"/Users/gaucho/Desktop/1313/gaouchsGGGGGSQL.sqlite"];
? ? } ? ?return _dbQueue;
}
//直接在外部調(diào)用這個(gè)方法?
- (void)insertQueueWithData{
? ? //創(chuàng)建新表
?? ? [self addNewData];
? ? //插入新數(shù)據(jù) 用隊(duì)列的方式
? ? NSString *nextStr = @"insert into t_myxiaoJJ(name,age) values('白骨精',180)";
? ? CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();
? ? [self.dbQueueinTransaction:^(FMDatabase*_Nonnulldb,BOOL*_Nonnullrollback) {
? ? ? ? NSLog(@"開(kāi)始插入數(shù)據(jù)");
? ? ? ? BOOLiserror =NO;
? ? ? ? for(inti =0; i <1000; i++) {
?? ? ? ? ? iserror = [dbexecuteUpdate:nextStr];
? ? ? ? }
? ? ? ? if(iserror) {
? ? ? ? ? ? NSLog(@"所有操作成功");
? ? ? ? }
? ? }];
? ? CFAbsoluteTimelinkTime = (CFAbsoluteTimeGetCurrent() - startTime);
? ? NSLog(@"運(yùn)行時(shí)間: %f ms", linkTime *1000.0);
}
- (void)addNewData{
? ? [self.dbQueueinDatabase:^(FMDatabase*_Nonnulldb) {
? ? ? ? if ([db executeUpdate:@"create table if not exists t_myxiaoJJ(id integer primary key autoincrement, name TEXT not null, age TEXT)" withArgumentsInArray:[NSArray array]]) {
? ? ? ? ? ? NSLog(@"創(chuàng)建表成功");
? ? ? ? }else{
? ? ? ? ? ? NSLog(@"創(chuàng)建表失敗");
? ? ? ? }
? ? }];
}