iOS中的数据存储(FMDB)

作者: 大慈大悲大熊猫 | 来源:发表于2015-03-30 11:01 被阅读1351次

    Tips:刚学习完markdown,来试试效果,妥妥的,哈哈。

    FMDB

    1.是什么

    FMDB是用OC的方式封装了SQLite的C语言API。

    2.有什么用

    使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码

    比起Core Data框架,FMDB更加轻量级和灵活

    提供了多线程安全的数据库操作方法,有效地防止数据混乱

    3.怎么用

    首先在工程里导入libsqlite3框架,并使用cocoapods或手动添加FMDB框架(FMDB)。

    FMDB使用前也要打开一个数据库,这个数据库文件存在则直接打开,不存在则会

    创建并打开。这里FMDB引入了一个FMDatabase对象来表示数据库,打开数据库

    和后面的数据库操作全部依赖此对象。

    下面是打开数据库获得FMDatabase对象的代码

    <pre><code>
    -(void)openDb:(NSString *)dbname{
    //取得数据库保存路径,通常保存沙盒Documents目录
    NSString *directory=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSString *filePath=[directory stringByAppendingPathComponent:dbname];
    //创建FMDatabase对象
    self.db=[FMDatabase databaseWithPath:filePath];
    //创建打开数据库
    if ([self.db open]){
    NSLog(@"数据库打开成功!");
    //这里可以同时创建表
    BOOL result=[db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
    }else{
    NSLog(@"数据库打开失败!");
    }
    }
    </code></pre>

    然后是增

    -(void)insert
     {
         for (int i = 0; i<10; i++) {
             NSString *name = [NSString stringWithFormat:@"jack-%d", arc4random_uniform(100)];
             // executeUpdate : 不确定的参数用?来占位
             [self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);", name, @(arc4random_uniform(40))];
         }
    }
    

    <pre><code>
    -(void)delete
    {
    // [self.db executeUpdate:@"DELETE FROM t_student;"];
    [self.db executeUpdate:@"DROP TABLE IF EXISTS t_student;"];
    [self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
    }
    </code></pre>

    <pre><code>

    • (void)query
      {
      // 1.执行查询语句
      FMResultSet *resultSet = [self.db executeQuery:@"SELECT * FROM t_student"];

      // 2.遍历结果
      while ([resultSet next]) {
      int ID = [resultSet intForColumn:@"id"];
      NSString *name = [resultSet stringForColumn:@"name"];
      int age = [resultSet intForColumn:@"age"];
      NSLog(@"%d %@ %d", ID, name, age);
      }
      }
      </code></pre>

    附:FMDB中常用的SQL语句

    @"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"

    @"INSERT INTO test_tab (name,age,mail) VALUES (?,?,?)

    @"UPDATE test_tab SET name=? WHERE name=?"

    @"DELETE FROM test_tab WHERE name=?"

    @"SELECT * FROM test_tab ORDER BY age DESC"

    Tips:继续学习!

    相关文章

      网友评论

      • HJXu:markdown还要搞下啊,看着好累呢 :smile:

      本文标题:iOS中的数据存储(FMDB)

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