什么是FMDB
很简单,一个iOS中SQLite API的封装库。对于多线程的并发操作进行了处理,是线程安全的。
FMDB重要类
FMDatabase:一个FMDatabase对象就代表一个单独的SQLite数据库,用来执行SQL语句用的。
FMResultSet:使用FMDatabase执行查询后的结果。
FMDatabaseQueue:用于在多线程中执行多个查询或更新。
FMDB的使用步骤详解
项目中导入FMDB 附上github地址: https://github.com/ccgus/fmdb 按照要求添加相应的类库
我用的是Cocoapods导入的,然后在.pch类中引入FMDatabase.h这个类,然后新建一个继承自NSObject的对象。
1、创建path路径:
FMDatabase*_db;NSString*_docPath;int mark_student;
.获取数据库文件的路径
_docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) lastObject];NSLog(@"%@",_docPath);
2、设置数据库名称
NSString*fileName = [_docPath stringByAppendingPathComponent:@"student.sqlite"];
mark_student = 1;
//2.获取数据库_db = [FMDatabase databaseWithPath:fileName];
if([_db open]) {NSLog(@"打开数据库成功");}else{NSLog(@"打开数据库失败");}
3、创建表
BOOLresult = [_db executeUpdate:@"CREATE
TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT,
name text NOT NULL, age integer NOT NULL, sex text NOT NULL);"];
if(result) {NSLog(@"创建表成功");}else{NSLog(@"创建表失败");}
4、插入数据
NSString*name = [NSStringstringWithFormat:@"家旺%@",@(mark_student)];
int age = mark_student;NSString*sex =@"男";mark_student ++;
BOOL result = [_db executeUpdate:@"INSERT INTO t_student (name, age, sex) VALUES (?,?,?)",name,@(age),sex];
if(result) {NSLog(@"插入成功");}else{NSLog(@"插入失败");}
5、删除数据
int idNum =10;
BOO Lresult = [_db executeUpdate:@"delete from t_student where id = ?",@(idNum)];
if(result) {NSLog(@"删除成功");}else{NSLog(@"删除失败");}
6、修改数据
//修改学生的名字
NSString*newName =@"家旺1";
NSString*oldName =@"家旺";
BOOLresult = [_db executeUpdate:@"update t_student set name = ? where name = ?",newName,oldName];
if(result) {NSLog(@"修改成功");}else{NSLog(@"修改失败");}
7、查询数据
//查询整个表FMResultSet * resultSet = [_db executeQuery:@"select * from t_student"];
遍历结果集合while([resultSet next]) {int idNum = [resultSet intForColumn:@"id"];
NSString*name = [resultSet objectForColumnName:@"name"];
int age = [resultSet intForColumn:@"age"];
NSString*sex = [resultSet objectForColumnName:@"sex"];
NSLog(@"学号:%@ 姓名:%@ 年龄:%@ 性别:%@",@(idNum),name,@(age),sex);}
8、表的删除
//如果表格存在 则销毁BOOL result = [_db executeUpdate:@"drop table if exists t_student"];
if(result) {NSLog(@"删除表成功");}else{NSLog(@"删除表失败");}