• iOS-Senior19-FMDB第三方应用


    代码版

    //第一步:引入框架,引入支持类库(libsqlite3.0添加)

    #import <FMDB.h>

    //声明数据库对象

    @property (nonatomic,strong) FMDatabase *dataBase;

    //存储路径

    @property (nonatomic,strong) NSString *filePath;

    ###############创建表######################

    - (void) createTable {

    //第一步:创建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 not null)";

    //第二步:找到存储路径

    NSString *document = [NSSearchPathForDirectoriesInDomains (NSDocumentDirctory,NSUserDomainMask,YES) objectAtIndex:0];

    NSLog(@"document = %@",document);

    self.filePath = [document stringByAppendingPathComponent:@"student.sqlite"];

    //第三步:使用路径初始化FMDB对象

    self.dataBase = [FMDatabase databaseWithPath:self.filePath];

    //第四步:(数据库执行相关的操作)需要判断数据库打开的时候进行的执行语句

    if([self.dataBase open]){

    BOOL result = [self.dataBase executeUpdate:createSql];

    if(result){

    NSLog(@"建表成功");

    }else {

    NSLog(@"建表失败");

    }

    }

    //第五步:关闭数据库

    [self.dataBase close];

    }

    ############添加数据####################

    //打开数据库

    [self.dataBase open];

    //第二步:进行相关的操作

    NSArray *nameArray = [NSArray arrayWithObjects :@"mbboy",@"boom sky",@"小明"];

    for(int i = 0; i <nameArray.count; i++){

    NSString *name = [nameArray objectAtIndex : i];

    //插入语句

    NSString *insertSql = @"insert into t_student(name,age,sex) values(?,?,?)";

    BOOL result = [self.dataBase executeUpdate:@"insert into t_student(name,age,sex) values(?,?,?)",name,@"69",@"boy"];

    if(result) {

    NSLog(@"插入成功");

    }else {

    NSLog(@"插入失败");

    }

    //关闭数据库

    [self.dataBase close];

    }

    ##############更改数据######################

    //打开数据库

    [self.dataBase];

    //给mbboy改名字

    BOOL result = [self.dataBase executeUpdate : @"update t_student set name = ? where name = ?",@"孟玲旭",@"mbboy"];

    if(result){

    NSLog(@"更改成功");

    } else {

    NSLog(@"更改失败");

    }

    //关闭数据库

    [self.dataBase close];

    }

    ##############删除数据#######################

    //打开数据库

    [self.dataBase open];

    //执行语句

    BOOL result = [self.dataBase executeUpdate:@"delete from t_student where name = ?",@"孟玲旭"];

    if(result){

    NSLog(@"删除成功");

    }else {

    NSLog(@"删除失败");

    }

    [self.dataBase close];

    ###################查询数据###################

    //打开数据库

    [self.dataBase open];

    //查询当前结果使用的类FMResultSet

    FMResultSet *resultSet = [self.dataBase executeQuery :@"select *from t_student"];

    //遍历出需要的结果内容

    while([resultSet next]){

    NSSting *name = [resultSet objectForColumnName :@"name"];

    NSInteger age = [resultSet intForColumn:@"age"];

    NSString *sex = [resultSet objectForColumnName:@"sex"];

    }

    //关闭数据库

    [self.dataBase close];

    }

    ##############插入很多学生####################

    //以队列的形式添加数据是FMDB比较常用的添加方式

        //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 (?,?,?)", @"隔壁老王", @"18", @"nan"] && isSucceed;

            isSucceed = [db executeUpdate:@"insert into t_student(name, age, sex) values (?,?,?)", @"-1", @"69", @"unknow"] && isSucceed;

            isSucceed = [db executeUpdate:@"insert into t_student(name, age, sex) values (?,?,?)", @"ajar", @"18", @"nan"] && isSucceed;

            //如果有错误,就会将它返回

            if (!isSucceed) {

                //block返回的参数rollback尽行处理(bool类型的指针)

                *rollback = YES;

                return;

            }

            

        }];

        //关闭数据库

        [self.dataBase close];

     

  • 相关阅读:
    MySQL Replication主从复制
    使用Amoeba 实现MySQL DB 读写分离
    Amoeba For MySQL入门:实现数据库水平切分
    11条理由告诉你,为什么你的网站不卖座
    很有用的观察者设计模式
    Apache + Tomcat集群配置详解 (1)
    Nginx+tomcat配置负载均衡
    JSON-RPC轻量级远程调用协议介绍及使用
    nginx的upstream目前支持5种方式的分配
    rpc远程过程协议调用
  • 原文地址:https://www.cnblogs.com/zhoulina/p/5544001.html
Copyright © 2020-2023  润新知