-
1.概念:FMDB是ios平台的SQLite数据库框架,以OC的形式封装了SQLite的C语言的API
-
2.优点:面向对象,轻量级,灵活,提供了多线程安全的数据库操作方法
-
3.核心类
-
1.FMDatabase:该对象代表一个单独的SQLite数据库,用来执行SQL语句
-
2.FMResultSet:查询后的结果集
-
3.FMDatabaseQueue:用于多线程中执行多个查询或更新,是线程安全的
-
-
4.打开数据库
//实例化一个数据库对象
FMDatabase *db = [FMDatabase databaseWithPath:path];
if([db open]){
//如果数据库打开成功
}
文件路径有三种情况
(1)具体文件路径
如果不存在会自动创建
(2)空字符串@""
会在临时目录创建一个空的数据库
当FMDatabase连接关闭时,数据库文件也被删除
(3)nil
会创建一个内存中临时数据库,当FMDatabase连接关闭时,数据库会被销毁
-
5.执行更新
- (BOOL)executeUpdate:(NSString*)sql, ...
- (BOOL)executeUpdateWithFormat:(NSString*)format, ...
- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments
-
6.执行查询
查询方法:
- (FMResultSet *)executeQuery:(NSString*)sql, ...
- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...
- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments
示例:模糊查询
+(NSArray<CZProductModel *> *)queryAllProductWithKeyWord:(NSString *)keyword{
NSString *sql = [NSString stringWithFormat:@"select * from t_product where proName like '%%%@%%'",keyword];
FMResultSet *set = [_db executeQuery:sql];
NSMutableArray *mArray = [NSMutableArray array];
//取数据,一行行取数据
while ([set next]) {
//取该行的列数据
int proNo = [set intForColumnIndex:0];
NSString *proName = [set stringForColumn:@"proName"];
int proPrice = [set intForColumnIndex:2];
NSLog(@"%d,%@,%d",proNo,proName,proPrice);
CZProductModel *model = [CZProductModel new];
model.proNo = proNo;
model.proName = proName;
model.proPrice = proPrice;
[mArray addObject:model];
}
return mArray.copy;
}