SQLite3的面向对象封装FMDB
FMDB简介 什么是FMDB? FMDB的优点? FMDB的github托管地址:https://github.com/ccgus/fmdb FMDatabase *db = [FMDatabase databaseWithPath:path];
if(![dbopen]){
NSLog(@"数据库打开失败!");
}
文件路径的三种情况说明: 数据库关闭 -(BOOL)close FMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,可能会造成数据混乱的问题。 FMDatabaseQueue对象的创建: + (instanceType)databaseQueueWithPath:(NSString *)aPath FMDatabase对象封装在其中,并且创建的同时打开。 关闭: 如: - (void)setupFMDB {
NSSting *path = [NSString stringWithFormat:@"%@/Docunments/h.sqlite",NSHomeDirectory()];
self.queue = [FMDatabaseQueue databaseQueueWithPath:path];
}
FMDatabaseQueue并不是FMDatabase,并没有直接执行SQL语句的方法 - (void)inDatabase:(void(^)(FMDatabase *db))block
block的参数db即封装在FMDatabaseQueue内部的FMDatabase对象 FMDatabase 执行更新语句 使用 executeUpdate:方法执行更新,该方法传递一个SQL语句字符串,并可以指定格式参数 -(BOOL)executeUpdate:(NSString*)sql,… 如: -(void)updateDesc:(NSString*)desc forID:(NSString*)ID{ [self.queueinDatabase:^(FMDatabase *db){ if(![db excuteUpdate:@"update_heroset desc = ? wherein = ? ",desc,ID]){ NSLog(@"%@",[dblastErrorMessage]); }
}];
}
执行查询语句 executeQuery:执行查询语句,该方法传递一个查询SQL语句,并可以指定站位参数,返回一个查询的结果集对象 FMResultSet对象是结果集对象,其内部是链表结构,通过next来便利每一行结果 -(NSString*)getDescWithID:(NSString*)ID{
__blocK NSString *pret = nil;
[self.queue inDatabase:^(FMDatabase *db){
FMResultSet *rs = [db executeQuery:@"selected desc from t_hero wherein = ?;",ID];
if([rs next]){
pret = [rs stringForColumn:@"desc"];
}
[rs close];
}];
return pret;
}
事务处理 开始事务begin transaction [self.queue inTransaction:^(void *db,BOOL *rollback){
FMResultSet *rs [db executeQuery:@"select * from t_hero;"];
while([rs next]){
//...
}
if(![db excuteUpdate:@"insert into t_table(name)values(:)",@"Rose"]){
*rollback = YES;
}
}]; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |