FMDB

作者: 瓊胖子 | 来源:发表于2018-09-30 07:30 被阅读0次

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(@"插入失败");
    }

插入成功之后我们会看到相应的数据


创建表并插入数据.png

第四步删除数据(注意同上)

这样就看到之前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(@"删除失败");
    }
删除数据.png

第五步修改数据

我们将马冬梅3修改为王小毛

//修改学生的名字
    NSString *newName = @"王小毛";
    NSString *oldName = @"马冬梅3";
    BOOL update=[fmdb executeUpdate:@"update t_student set name = ? where name =?",newName,oldName];
    if (update) {
        NSLog(@"修改成功");
    } else {
        NSLog(@"修改失败");
    }
修改学生名字.png

第六步查询数据

//查询整个表
    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);
    }
打印表内所有学生信息.png

这样我们就完成了数据库中的增、删、改、查,最后将我们的表删除。

//如果表格存在 则销毁
    BOOL result = [fmdb executeUpdate:@"drop table if exists t_student"];
    if (result) {
        NSLog(@"删除表成功");
    } else {
        NSLog(@"删除表失败");
    }
删除表.png

这样就完整的将数据库完整的操作了一遍~~~

欢迎指正!!!

相关文章

网友评论

    本文标题:FMDB

    本文链接:https://www.haomeiwen.com/subject/wcluoftx.html