zoukankan      html  css  js  c++  java
  • 1.归档以及数据库操作

    归档的操作

    作用:主要用于自定义对象的持久化

    使用:遵守<NSCoding协议>

    - (void)encodeWithCoder:(NSCoder *)aCoder;

      - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder;

    1.SQLite3的使用

    1、要使用SQLite3,先要添加库文件 libsqlite3.dylib 

    Snip20160613_3.png

    2.导入头文件

    import<sqlite3.h>

    2.FMDB的介绍

    1.FMDB是iOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言API,使用起来比单纯调用SQLite语句方便

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

    3.对比苹果自带的Core Data框架,更加轻量级灵活

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

    如果要使用FMDB

    import "FMDB.h"

    3.核心三大类

      • FMDatabase(创建、删除)
        • 一个FMDatabase对象就代表一个单独的SQLite数据库
        • 用来执行SQL语句
      • FMResultSet(用来查询)
        • 使用FMDatabase执行查询后的结果集
      • FMDatabaseQueue
        • 用于在多线程中执行多个查询或更新,它是线程安全的

    4.使用步骤

    (1) 打开数据库

      1.通过指定SQLite数据库文件路径来创建FMDatabase对象

    FMDatabase *db = [FMDatabase databaseWithPath:path];

      if ([db open]) {

      // 数据库打开成功

      }

    2.使用实例:

    // 1.获得数据库文件的路径

      NSString *doc =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    // 2.拼接文件名

    NSString *filename = [doc stringByAppendingPathComponent:@"status.sqlite"]; 

      // 3.得到数据库

    _db = [FMDatabase databaseWithPath:filename];

      // 4.打开数据库 .使用如下语句,如果打开失败,可能是权限不足或者资源不足。通常打开完操作操作后,需要调用 close 方法来关闭数据库。在和数据库交互 之前,数据库必须是打开的。如果资源或权限不足无法打开或创建数据库,都会导致打开失败。

      if ([_db open]) {

         // 5.创建表格

         BOOL result = [_db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_home_status (id integer PRIMARY KEY AUTOINCREMENT, access_token text NOT NULL, status_idstr text NOT NULL, status_dict blob NOT NULL);"];

         if (result) {

             NSLog(@"成功创表");

         } else {

             NSLog(@"创表失败");

      }

    NULL: 表示该值为NULL值。

         INTEGER: 无符号整型值。

         REAL: 浮点值。

         TEXT: 文本字符串,存储使用的编码方式为UTF-8、UTF-16BE、UTF-16LE。

         BLOB: 存储Blob数据,该类型数据和输入数据完全相同。

    3.路径设置:

    1.如果设置的路径不存在,则会自动创建

    2.如果为@""或者nil,则会在temp文件中创建一个空的数据库,当数据库关闭时,数据库文件也会被删除

    (2) 执行插入

    使用FMDataBase类执行数据库插入命令SQL“insert into”

    //1.executeUpdate:oc  [self.db executeUpdate:@“INSERT INTO t_student (name, age) VALUES (?,?);”,name,@(age)];

        //2.executeUpdateWithForamat:不确定的参数用%@,%d等来占位 (参数为原始数据类型,执行语句不区分大小写)

      [self.db executeUpdateWithForamat:@“insert into t_student (name,age) values (%@,%i);”,name,age];

        //3.参数是数组的使用方式

    int age = 18;

      [self.db executeUpdate:@“INSERT INTO t_student(name,age) VALUES  (?,?);”withArgumentsInArray:@[name,@(age)]];

    (3) 执行删除

    使用FMDataBase类执行数据库删除命令SQL“delete”

    //1.不确定的参数用?来占位 (后面参数必须是oc对象,需要将int包装成OC对象)

      int idNum = 101;

        [self.db executeUpdate:@“delete from t_student where id = ?;”,@(idNum)];

       //2.不确定的参数用%@,%d等来占位

    [self.db executeUpdateWithFormat:@“ t_student = %@;”,@“apple_name”];

    (4)执行更新

    简单来说,只要不是以SELECT开头的命令都是更新命令。

    1.CREATE,DROP,INSERT,UPDATE,DELETE等除了查询以外的操作,都称为更新操作

    2.使用executeUpdate:方法做更新操作

      • -(BOOL)executeUpdate:(NSString*)sql, ...
      • -(BOOL)executeUpdateWithFormat:(NSString*)format, ...
      • -(BOOL)executeUpdate:(NSString)sql withArgumentsInArray:(NSArray )arguments
      • 在SQL字符串中写SQL语句
      • 执行更新返回一个BOOL值。YES表示 执行成功,否则表示有错误。你可以调用 -lastErrorMessage 和 -lastErrorCode方法来得到更多信息。
    • 3.使用示例

    [db executeUpdate:@"UPDATE t_student_classtwo SET age = ? WHERE name = ?;", @"18", @"stu"]

    (5) 执行查询

    1.执行数据库查询的方法:(查询使用FMResultSet对象)

    SELECT命令就是查询,执行查询的方法是以-excuteQuery开头的。

    • 执行查询时,如果成功返回FMResultSet对象,错误返回nil。与执行更新相当,支持使用NSError参数。
    • -(FMResultSet )executeQuery:(NSString )sql, ...
    • -(FMResultSet )executeQueryWithFormat:(NSString)format, ...
    • -(FMResultSet )executeQuery:(NSString )sql withArgumentsInArray:(NSArray *)arguments
    • FMResultSet 对象的 next 方法来遍历查询到的数据

    FMResultSet获取不同数据格式的方法

    • intForColumn:
    • longForColumn:
    • longLongIntForColumn: 
    • boolForColumn:
    • doubleForColumn:
    • stringForColumn:
    • dataForColumn:
    • dataNoCopyForColumn:
    • UTF8StringForColumnIndex: 
    • objectForColumn:

    2.使用示例

    // FMResultSet *resultSet = [self.db execute Query:@“select * from t_student;”];

      //根据条件查询

    FMResultSet *resultSet = [self.db executeQuery:@“select * from t_student where id<?;”@(14)];

    //排序查询

    [_db executeQuery:@"select * from t_Student ORDER BY age DESC"] ,这个是通过age字段 降序排序 升序就是不写DESC

      //遍历结果集合   

    while ([resultSet  next])

       {

        int idNum = [resultSet intForColumn:@“id”];

        NSString *name = [resultSet objectForColumn:@“name”];

        int age = [resultSet intForColumn:@“age”];

      }

    (6) 数据库删除

    使用FMDataBase类执行数据库销毁命令SQLdrop ...

    //   [self.db executeUpadate:@“drop table if exists t_student;”];

    (7) 线程安全的数据库

    为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue

    示例:

    queue = [FMDatabaseQueue databaseQueueWithPath:path];

      [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"stu1"];

      [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"stu2"];

      [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"stu3"];

      FMResultSet *results = [db executeQuery:@"select * from t_student"];

      while ([results next]) {

      // …

      }

      }];

  • 相关阅读:
    关于meta便签详解
    移动端等分比显示导航状态
    css3单选 复选按钮--代码分享
    css-样式重构-代码分享
    代码分享h5-sessionStorage,提示app下载代码块
    微信浏览器打开 点击下载app 无需提示使用浏览器打开--代码分享
    js 判断IOS版本号
    二进制,八进制,十进制,十六进制之间的转换
    JS组件系列——Bootstrap文件上传组件:bootstrap fileinput
    Bootstrap文件上传插件File Input的使用
  • 原文地址:https://www.cnblogs.com/huiyi-520/p/5583369.html
Copyright © 2011-2022 走看看