zoukankan      html  css  js  c++  java
  • 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:@"查询语句"];

  • 相关阅读:
    flume自定义source
    flume自定义sink之文件
    - Exception follows. org.apache.flume.FlumeException: java.net.BindException: Address already in use
    flume自定义sink之mysql
    Vue 【事件&样式】样式
    选择器
    rem
    表格和表单
    双飞翼布局、圣杯布局
    三栏布局
  • 原文地址:https://www.cnblogs.com/TWFUQTN/p/5543144.html
Copyright © 2011-2022 走看看