1.什么是FMDB
FMDB是iOS平台的SQLite数据库框架
FMDB以OC的方式封装了SQLite的C语言API
2.FMDB的优点
使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码
对比苹果自带的Core Data框架,更加轻量级和灵活
提供了多线程安全的数据库操作方法,有效地防止数据混乱
我们使用FMDB的时候首先将FMDB使用cocopods导入到我们的工程中:pod 'FMDB'
之后在我们的工程中导入需要的头文件即可:#import "FMDatabase.h"
开发中我们一般会把数据存储到沙河路径下
NSString * docPath=[[NSString alloc]init];
docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];//获取沙河地址
NSLog(@"docPath==%@",docPath);
第一步设置数据库名称
NSString * fileName=[docPath stringByAppendingPathComponent:@"student.sqlite"];//设置数据库名称
FMDatabase * fmdb=[FMDatabase databaseWithPath:fileName];//创建并获取数据库信息
if ([fmdb open]) {
NSLog(@"数据库打开成功!");
}else{
NSLog(@"数据库打开失败!");
}
第二步创建表
其中:
CREATE TABLE IF NOT EXISTS t_student 按照字面翻译为如果不存在t_student,则创建表;
id integer PRIMARY KEY AUTOINCREMENT 字段id数据类型为integer类型,并且为基键自增;
name text NOT NULL, age integer NOT NULL, sex text NOT NULL 字段name、sex的数据类型为text 默认为NULL(空),字段age 数据类型为integer 默认为NULL
// PRIMARY KEY AUTOINCREMENT 基键 并且自增
BOOL executeUpdate = [fmdb 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 (executeUpdate) {
NSLog(@"创建表成功");
} else {
NSLog(@"创建表失败");
}
第三步添加数据(插入数据)
注意:
1.executeUpdate:不确定的参数用?来占位(后面参数必须是oc对象,;代表语句结束)
2.executeUpdateWithForamat:不确定的参数用%@,%d等来占位 (参数为原始数据类型,执行语句不区分大小写)
int mark_student=1;
NSString *name = [NSString stringWithFormat:@"马冬梅%@",@(mark_student)];
int age = mark_student;
NSString *sex = @"女";
mark_student ++;
BOOL results = [fmdb executeUpdate:@"INSERT INTO t_student (name, age, sex) VALUES (?,?,?)",name,@(age),sex];
// BOOL result = [fmdb executeUpdateWithFormat:@"insert into t_student (name,age, sex) values (%@,%i,%@)",name,age,sex];
//3.参数是数组的使用方式
// BOOL result = [fmdb executeUpdate:@"INSERT INTO t_student(name,age,sex) VALUES (?,?,?);" withArgumentsInArray:@[name,@(age),sex]];
if (results) {
NSLog(@"插入成功");
} else {
NSLog(@"插入失败");
}
插入成功之后我们会看到相应的数据
第四步删除数据(注意同上)
这样就看到之前id为2的马冬梅2就被删除了
int idNum=2;
BOOL deleate=[fmdb executeUpdate:@"delete from t_student where id = ?",@(idNum)];//按照id进行删除
// BOOL deleate=[fmdb executeUpdateWithFormat:@"delete from t_student where name = %@",@"王子涵1"];//按照名字进行删除
if (deleate) {
NSLog(@"删除成功");
}else{
NSLog(@"删除失败");
}
第五步修改数据
我们将马冬梅3修改为王小毛
//修改学生的名字
NSString *newName = @"王小毛";
NSString *oldName = @"马冬梅3";
BOOL update=[fmdb executeUpdate:@"update t_student set name = ? where name =?",newName,oldName];
if (update) {
NSLog(@"修改成功");
} else {
NSLog(@"修改失败");
}
第六步查询数据
//查询整个表
FMResultSet * resultSet = [fmdb executeQuery:@"select * from t_student"];
//根据条件查询
//FMResultSet * resultSet = [fmdb executeQuery:@"select * from t_student where id < ?", @(4)];
//遍历结果集合
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);
}
这样我们就完成了数据库中的增、删、改、查,最后将我们的表删除。
//如果表格存在 则销毁
BOOL result = [fmdb executeUpdate:@"drop table if exists t_student"];
if (result) {
NSLog(@"删除表成功");
} else {
NSLog(@"删除表失败");
}
这样就完整的将数据库完整的操作了一遍~~~
欢迎指正!!!