FMDB是一个轻量级的数据库,也是对iOS相关SQLite的API进行封装的第三方库,使用者只需调用该框架的API就能很方便的进行本地数据库的操作。
重要的几个类:
- RedFMDatabase:一个FMDatabase对象就代表一个单独的SQLite数据库(注意并不是表),用来执行SQL语句
- RedFMResultSet:使用FMDatabase执行查询后的结果集
- RedFMDatabaseQueue:用于在多线程中执行多个查询或更新,它是线程安全的
第一步
使用cocoapods导入FMDB,如果小伙伴们还不会使用cocoapods,赶快点击链接安装吧。
第二步
导入libsqlite3.0框架,导入头文件FMDatabase.h
第三步代码:
#pragma mark -创建数据库和表
- (IBAction)addData:(id)sender {
_docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSLog(@"%@",_docPath);
NSString *fileName = [_docPath stringByAppendingPathComponent:@"hobbies.sqlite"];
_db = [FMDatabase databaseWithPath:fileName];
if ([_db open]) {
NSLog(@"打开数据库成功");
} else {
NSLog(@"打开数据库失败");
}
BOOL result = [_db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_hobbies (id integer NOT NULL, name text NOT NULL, sex text NOT NULL, hobbies integer NOT NULL);"];
if (result) {
NSLog(@"创建表成功");
} else {
NSLog(@"创建表失败");
}
}
#pragma mark -添加数据
- (IBAction)addData:(id)sender {
NSLog(@"添加数据");
NSString *name = [NSString stringWithFormat:@"呛水的鱼%@",i];
NSString *sex = @"未知";
NSString *hobbies = @"不晓得";
BOOL result = [_db executeUpdate:@"INSERT INTO t_student (id, name, sex, hobbies) VALUES (?,?,?,?)",@(i),name,sex,hobbies];
if (result) {
NSLog(@"添加数据成功");
} else {
NSLog(@"添加数据失败");
}
}
#pragma mark - 修改数据
- (IBAction)modifyData:(id)sender {
NSLog(@"修改数据");
NSString *newHobbies = @"吐泡泡";
NSString *oldHobbies = @"不晓得";
BOOL result = [_db executeUpdate:@"update t_student set hobbies = ? where hobbies = ?",newHobbies,oldHobbies];
if (result) {
NSLog(@"修改成功");
} else {
NSLog(@"修改失败");
}
}
#pragma mark - 删除数据
- (IBAction)deleteData:(id)sender {
NSLog(@"删除数据");
BOOL result = [_db executeUpdateWithFormat:@"delete from t_student where sex = %@",@"未知"];
if (result) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
}
}
#pragma mark - 删除表
- (IBAction)deleteTable:(id)sender {
NSLog(@"删除表");
BOOL result = [_db executeUpdate:@"drop table if exists t_student"];
if (result) {
NSLog(@"删除表成功");
} else {
NSLog(@"删除表失败");
}
}
#pragma mark - 查询数据
- (IBAction)queryData:(id)sender {
NSLog(@"查询数据");
FMResultSet *resultSet = [_db executeQuery:@"select * from t_student"];
while ([resultSet next]) {
int idNum = [resultSet intForColumn:@"id"];
NSString *name = [resultSet objectForKeyedSubscript:@"name"];
NSString *sex = [resultSet objectForKeyedSubscript:@"sex"];
NSString *hobbies = [resultSet objectForKeyedSubscript:@"hobbies"];
NSLog(@"编号:%@ 姓名:%@ 性别:%@ 爱好:%@",@(idNum),name,sex,hobbies);
}
}
总结
以上就是基本的使用方法,希望大家可以看明白,如何不足之处还望大家及时指出,我将会在第一时间更正。此篇文章会不断完善更新,争取做到把我对FMDB的理解介绍的最详细。目前demo的线程安全我还没有考虑,我之后会补上,demo也会及时更新。demo以上传至github可供大家下载demo传送门