FMDB使用说明介绍
来源:互联网 发布:大学送礼给老师知乎 编辑:程序博客网 时间:2024/06/12 21:29
简介
FMDB是SQLite在oc下的封装,有三个主要的类1.FMDatabase – 表示一个单独的SQLite数据库。 用来执行SQLite的命令。2.FMResultSet – 表示FMDatabase执行查询后结果集3.FMDatabaseQueue – 如果你想在多线程中执行多个查询或更新,你应该使用该类。这是线程安全的。
使用
创建FMDatabase对象时参数为SQLite数据库文件路径。该路径可以是以下三种之一:1.文件路径。该文件路径无需真实存在,如果不存在会自动创建。2.空字符串@”"。表示会在临时目录创建一个空的数据库,当FMDatabase 链接关闭时,文件也被删除。3.NULL. 将创建一个in-memory数据库。同样的,当FMDatabase连接关闭时,数据会被销毁。
在和数据库交互 之前,数据库必须是打开的。如果资源或权限不足无法打开或创建数据库,都会导致打开失败。FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"];
执行更新一切不是SELECT命令的命令都视为更新。这包括 CREATE, UPDATE, INSERT,ALTER,COMMIT, BEGIN, DETACH, DELETE, DROP, END, EXPLAIN, VACUUM, and REPLACE (等)。简单来说,只要不是以SELECT开头的命令都是UPDATE命令。执行更新返回一个BOOL值。YES表示执行成功,否则表示有那些错误 。你可以调用 -lastErrorMessage 和 -lastErrorCode方法来得到更多信息。执行查询SELECT命令就是查询,执行查询的方法是以 -excuteQuery开头的。执行查询时,如果成功返回FMResultSet对象, 错误返回nil. 与执行更新相当,支持使用 NSError**参数。同时,你也可以使用 -lastErrorCode和-lastErrorMessage获知错误信息。为了遍历查询结果,你可以使用while循环。你还需要知道怎么跳到下一个记录。使用FMDB,很简单实现,就像这样:if (![db open]) { [db release]; return;}
FMResultSet *s = [db executeQuery:@"SELECT * FROM myTable"];while ([s next]) { //retrieve values for each record}
FMResultSet 提供了很多方法来获得所需的格式的值:
- (int)intForColumn:(NSString*)columnName;- (int)intForColumnIndex:(int)columnIdx;- (long)longForColumn:(NSString*)columnName;- (long)longForColumnIndex:(int)columnIdx;- (long long int)longLongIntForColumn:(NSString*)columnName;- (long long int)longLongIntForColumnIndex:(int)columnIdx;- (unsigned long long int)unsignedLongLongIntForColumn:(NSString*)columnName;- (unsigned long long int)unsignedLongLongIntForColumnIndex:(int)columnIdx;- (BOOL)boolForColumn:(NSString*)columnName;- (BOOL)boolForColumnIndex:(int)columnIdx;- (double)doubleForColumn:(NSString*)columnName;- (double)doubleForColumnIndex:(int)columnIdx;- (NSString*)stringForColumn:(NSString*)columnName;- (NSString*)stringForColumnIndex:(int)columnIdx;- (NSDate*)dateForColumn:(NSString*)columnName;- (NSDate*)dateForColumnIndex:(int)columnIdx;- (NSData*)dataForColumn:(NSString*)columnName;- (NSData*)dataForColumnIndex:(int)columnIdx;- (const unsigned char *)UTF8StringForColumnIndex:(int)columnIdx;- (const unsigned char *)UTF8StringForColumnName:(NSString*)columnName;// returns one of NSNumber, NSString, NSData, or NSNull- (id)objectForColumnName:(NSString*)columnName;- (id)objectForColumnIndex:(int)columnIdx;
通常,你不需要调用[FMResultSet close]来关闭结果集,它会在自身deallocate或者父数据库关闭的时候自动关闭
使用FMDatabaseQueue 及线程安全
在多个线程中同时使用一个FMDatabase实例是不明智的。最好为每个线程创建一个FMDatabase对象。 不要让多个线程分享同一个实例,它无法在多个线程中同时使用。 如果你这么干了,会有不好的事发生,程序会时经常崩溃,或者发生异常,或者陨石会从天上掉下来砸到你Mac Pro(官方说法...). 总之很崩溃。所以,不要初始化FMDatabase对象,然后在多个线程中使用。请使用 FMDatabaseQueue,它是你的朋友而且会帮助你。以下是使用方法FMDatabaseQueue queue = [FMDatabaseQueue databaseQueueWithPath:aPath];[queue inTransaction:^(FMDatabase db, BOOL rollback) { [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]]; [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]]; [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]]; if (whoopsSomethingWrongHappened) { rollback = YES; return; } // etc… [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]];}];
FMDatabaseQueue 后台会建立GCD队列(依据类名),并执行你传给G-C-D队列的块。这意味着 你从多线程同时调用调用方法,GCD也会按它接收的块的顺序来执行
作者:HolyCat_猫
链接:http://www.jianshu.com/p/c41dc4d2d459
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- FMDB使用说明介绍
- FMDB简单介绍
- FMDB简单介绍
- FMDB使用介绍
- FMDB简单介绍
- FMDB简单介绍
- FMDB简单介绍
- FMDB简单介绍
- 《SQLite3——FMDB介绍》
- [绍棠] FMDB的方法介绍
- Quartz介绍 使用说明
- Hessian介绍及使用说明
- Cg使用说明 第一章 介绍
- ViewPager介绍和使用说明
- ViewPager介绍和使用说明
- ViewPager介绍和使用说明
- Quartz介绍 使用说明
- CyclicBarrier介绍及使用说明
- Dynamic CRM 2016 IFD配置(6)Claims-based认证-外部访问配置
- spark on hive 写入hdfs 用csv格式
- c语言——表达式的计算
- java常用类库---大数操作(BigInteger,BigDecimal)
- 树莓派简介
- FMDB使用说明介绍
- MyBatis(一)
- TensorFlow实战Google深度学习框架第三章总结
- websocket
- BigDecimal保留小数位
- GC标记回收
- 蓝牙搜索
- python2.7 01字符串与二进制效率对比
- MongoDB:17-MongoDB-索引限制及其他限制规则