• iOS进阶_FMDB的简单使用


    先引入FMDB第三方,点击查看方法

    一、创建表

    1.创建sql语句
        NSString *createSql = @"create table if not exists t_student(id integer primary key autoincrement not null, name text not null, age integer not null, sex text no null)";
        
    2.找到存储路径
        NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        NSLog(@"document = %@", document);
        
        self.filePath = [document stringByAppendingPathComponent:@"student.sqlite"];
        NSLog(@"filePath = %@", self.filePath);
        
    3.使用路径初始化FMDB对象
        self.dataBase = [FMDatabase databaseWithPath:self.filePath];
        
    4.需要判断数据库打开的时候才进行执行语句
        if ([self.dataBase open]) {
            
            BOOL result = [self.dataBase executeUpdate:createSql];
            
            if (result) {
                NSLog(@"建表成功");
            } else {
                NSLog(@"建表失败");
            }
        }
        
    5.关闭数据库
        [self.dataBase close];

    二、增删改查

    都先打开数据库:[数据库 open];

    设置对应的sql语句:NSString *sql = @"对应sql语句";

    数据库走对应的方法,获得结果,FMDB中此结果为BOOL型,而不是普通数据中的int型。BOOL result = [数据库 executeUpdate:对应语句,(参数)];

    对result结果进行判断,成功即输出成功,失败打印错误代码

       if (result) {
                NSLog(@"插入成功");
            } else {
                NSLog(@"插入失败,result = %d", result);
            }

    关闭数据库。

    1.增:insert into t_student (name, age, sex) values (?, ?, ?)

    增第二种方式,队列(优化方式):

    //FMDB不支持多个线程同时操作,所以一般以串行的方式实现
        [self.dataBase open]
        //第一步:创建操作队列
        FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:self.filePath];
        //标识:记录是否操作成功
        __block BOOL isSucceed = YES;
        //第二步:把所需要做的事情打包放到操作队列里
        [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
            //串行队列
            isSucceed = [db executeUpdate:@"insert into t_student (name, age, sex) values (?,?,?)", @"隔壁老王", @38, @"男"] && isSucceed;
            isSucceed = [db executeUpdate:@"insert into t_student (name, age, sex) values (?,?,?)", @"赵符壹", @"438", @"男"] && isSucceed;
            isSucceed = [db executeUpdate:@"insert into t_student (name, age, sex) values (?,?,?)", @"AJAR", @"18", @"男"] && isSucceed;
            if (isSucceed) {
                NSLog(@"添加多个成功");
            } else {        //如果有错误
                //block返回的参数rollback进行处理(bool类型的指针)
                *rollback = YES;
                return ;
            }
        }];
        [self.dataBase close];

    2.删:delete from t_student where name = ?", @"aaa"

    3.改:update t_student set name = ? where name = ?", @"bbb", @"ccc"

    4.查:select * from t_student

    //查询结果使用的类FMResultSet
        FMResultSet *resultSet = [数据库 executeQuery:@"查询语句"];

  • 相关阅读:
    关于开发 Web AI 的思考(kendryte K210)
    怪不得我说,这几个月的代码数据都跑哪里去了....
    在 Android 上使用蓝牙作为主机进行一对多从机传输数据的实测,理论 5
    写了一下 micropython 的文件系统单元测试
    mark 自己未来要写一下,蓝牙主机一对多从机和 K210 的网络通信优化过程。
    VUE实现Studio管理后台(五):手风琴式折叠组件(Accordion)
    VUE实现Studio管理后台(四):状态模式实现窗口停靠,灵动、自由
    VUE实现Studio管理后台(三):支持多语言国际化(vue-i18n)
    VUE实现Studio管理后台(二):Slot实现选项卡tab切换效果,可自由填装内容
    VUE实现Studio管理后台(一):鼠标拖放改变窗口大小
  • 原文地址:https://www.cnblogs.com/TWFUQTN/p/5543144.html
Copyright © 2020-2023  润新知