• 使用FMDB框架来加载数据库


    1、打开数据库

        先要获取沙盒的数据库文件名,并创建数据库文件名,定数据库:

        @property (nonatomic, strong) FMDatabase *db;

        // 0.获得沙盒中的数据库文件名

        NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 

        NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"];

       // 1.创建数据库实例对象

        self.db = [FMDatabase databaseWithPath:filename];

       // 2.打开数据库

        if ( [self.db open] ) {

            NSLog(@"数据库打开成功");

        // 创表

          BOOL result = [self.db executeUpdate:@"create table if not exists t_student (id integer primary key    autoincrement, name text, age integer);"];

    if (result) {

                NSLog(@"创表成功");

            } else {

                NSLog(@"创表失败");

            }

        } else {

            NSLog(@"数据库打开失败");

    }

    2、FMDB的核心类

        FMDB有三个主要的类:

        FMDatabase:一个FMDatabase对象就代表一个单独的SQLite数据库;用来执行SQL语句

        FMResultSet:使用FMDatabase执行查询后的结果集

        FMDatabaseQueue:用于在多线程中执行多个查询或更新,它是线程安全的

    3、执行更新

         使用executeUpdate:方法执行更新:

             - (BOOL)executeUpdate:(NSString*)sql, ...  // 添加数据库更新语句,除了查找,其他都用更新语句

             - (BOOL)executeUpdateWithFormat:(NSString*)format, ...

             -(BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments

    4、执行查询

            - (FMResultSet *)executeQuery:(NSString*)sql, ...

            - (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...

            - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments

       示例:

              // 查询数据

             FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];

            // 遍历结果集

           while ([rs next]) {

           NSString *name = [rs stringForColumn:@"name"];   

           int age = [rs intForColumn:@"age"];

           double score = [rs doubleForColumn:@"score"];

           }

    5、FMDB事务的使用

         // 开启事务

         [db beginTransaction];

         //  [db executeUpdate:@"begin transaction;"];

         // 更新数据

          [db executeUpdate:@"update t_student set age = ? where name = ?;", @20, @"jack"];

         [db executeUpdate:@"update t_student set age = ? where name = ?;", @20, @"jack"];

         // 提交事务

          [db commit]; 

         //[db executeUpdate:@"commit transaction;"];

     注意:其中有一条失败了,就会出错,发现情况不对,可以使用回滚事务:

            if (发现情况不对)

             {

                // 回滚事务

                [db rollback]; 

               // [db executeUpdate:@"rollback transaction;"];

              }

  • 相关阅读:
    react模拟后端接口及提交方式 json-server
    CSS基础知识(概念、块级元素、行内元素、选择器)
    HTML基础知识(表格、表单)
    HTML基础知识(常见元素、列表、链接元素、图片元素)
    【Ionic】---AngularJS扩展基本布局
    多行文本溢出显示省略号…
    【AngularJs】---"Error: [ng:areq] Argument 'fn' is not a function, got undefined"
    【AngularJs】---$sce 输出Html
    【AngularJs】---实现select的ng-options
    浅谈WLAN干扰与抗干扰技术
  • 原文地址:https://www.cnblogs.com/angongIT/p/3815837.html
Copyright © 2020-2023  润新知