数据永久性存储

作者: DVWang | 来源:发表于2017-09-08 15:49 被阅读0次

    1.NSFileHandle

    <注意>只能存入和读取字符串

    2.Plist文件

    <注意>只能存放7种类型的对象指针 ——开发中经常用于存放固定不变的内容 比如tabBar上的标题、图片等

    3.NSUserDefaults

    <注意>只能存放7种类型的对象指针 ——开发中经常用于存放固定不变的内容 比如tabBar上的标题、图片等
    NSUserDefaults支持的数据类型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL.
    NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的是一些信息,这时候就不能直接存储到NSUserDefaults了
    NSString * name = @"lucy";
    NSString * passW = @"123";
    //创建 在沙盒路径下 UI
    NSUserDefaults * userD = [NSUserDefaults standardUserDefaults];
    //第一次 在本机 登录的时候
    [userD setObject:name forKey:@"name"];
    [userD setObject:passW forKey:@"passW"];
    //以前的时候 把数据 同步到本地的磁盘
    [userD synchronize];
    //演示第二次登录
    NSUserDefaults * userS = [NSUserDefaults standardUserDefaults];
    NSString * name = [userS objectForKey:@"name"];
    NSString *passW = [userS objectForKey:@"passW"];

    4.归档

    <注意>能够存放任意类型的对象指针(对象指针所属的类必须遵守NSCoding协议 对象指针的成员变量所属的类也要遵守NSCoding协议)

    5.数据库SQLite使用

    //数据库存放的位置在沙盒路径
    //数据库在使用之前必须处于打开状态
    //数据库存放在沙盒路径下的Documents 数据库的后缀为.db 或.sqlite
    //数据库中表格内的数据进行增删改查操作 有开源的第三方库FMDataBase
    //使用第三方库对数据库进行操作需要导入框架libsqlite3.framwork
    使用sql语句只能存放系统类的对象指针 数据库存放的位置在当前设备的沙盒路径下
    数据库一般一个工程只创建一个
    //存放本地图片 在数据库中的存放格式就是二进制
    //存放网络图片、音频、视频 在数据库中的存放格式就是资源的地址
    blob: 二进制对象
    SQL语句
    create table if not exists Student (ID integer primary key autoincrement,name varchar(256),age integer,birthDay date);
    //表格创建成功以后 里面的字段不能添加也不能删除 否则数据修改失败
    //<1>向表格插入数据
    //[注意]插入的数据除了整型、浮点型以外的所有类型的数据全部需要用 ' '括起来
    insert into Student(name,age,birthDay) values ('闽航',18,'1996-12-10');
    insert into Student(name,age) values ('玲玲',18);
    //查询
    //<1>查询表格中所有数据信息
    select * from Student;
    insert to Student(name,age,birthDay) values ('张三',19,'1890-09-10');
    //<2>查询几个字段的值
    select name,age from Student;
    //<3>按照某个条件查询
    select * from Student where name = '闽航';
    //<4>按照某个条件模糊查询
    select * from Student where name like '%航%';
    //<5>按照条件查询某个字段
    select birthDay from Student where name = '闽航';
    //<6>查询表格中对象的个数
    select count(*) from Student;
    //<7>查询某个字段的总和
    select sum(age) from Student;
    //<8>查询某个字段的平均值
    select avg(age) from Student;
    //修改
    //<1>修改表格中所有字段的信息
    update Student set name ='xuli';
    select * from Student;
    //<2>按照某个条件修改信息
    update Student set name = '双月' where ID=1;
    update Student set name = '玲玲',age=18,birthDay='1996-10-10' where ID=2;
    //<3>按照多个条件查询
    select * from Student where ID=1 and age=18;
    select * from Student where ID = 1 or age = 18;
    //删除
    //<1>按照条件删除
    delete from Student where ID = 1;
    select * from Student;
    //<2>删除表格中的所有数据
    delete from Student;

    FMDB使用

    //同名数据库只能创建一个 如果第二次创建同名数据库 会创建失败 但是会将原来的数据库打开
    FMDatabase * database;
    //数据库的创建/表格的创建/增删改 操作都用的是同一个方法executeUpdate
    //只是SQL语句的内容不同
    //数据的查询操作使用的方法是executeQuery:
    //[注意]使用sql语句不能向数据库表格中存放自定义的对象指针 只能存放系统提送的数据类型
    使用单例方法创建当前类的对象 确保数据库和表格值创建一次
    1.单例创建数据库
    //创建数据库
    NSString * path = [NSHomeDirectory() stringByAppendingString:@"/Documents/PersonDB.db"];
    //初始化对象
    FMDatabase * fmdb = [[FMDatabase alloc]initWithPath:path];
    //打开数据库
    BOOL isSuccess = [fmdb open];
    if (isSuccess) {
    NSString * sql = @"create table if not exists UserInfo(ID integer primary key,name varchar(256),age integer,image blob)";
    BOOL isTable = [fmdb executeUpdate:sql];
    if (isTable) {
    NSLog(@"success");
    }else
    {
    NSLog(@"%@",fmdb.lastErrorMessage);
    }
    }else{
    NSLog(@"数据库创建/打开失败%@",fmdb.lastErrorMessage);
    }
    2.增
    int personID = person.personID;
    NSString * personName = person.personName;
    int age = person.personAge;
    UIImage * personImage = person.personHeadImage;
    NSString * sql = @"insert into UserInfo(ID,name,age,image) values(?,?,?,?)";
    BOOL isSucess = [fmdb executeUpdate:sql,@(personID),personName,@(age),UIImagePNGRepresentation(personImage)];
    if (isSucess) {
    NSLog(@"insert success");
    }
    3.删
    NSString * sql = @"delete from Person where name = ?";
    BOOL isSuccess = [database executeUpdate:sql,@"wang"];
    if (isSuccess) {
    NSLog(@"delete success");
    }else{
    NSLog(@"delete false");
    }
    4.改
    NSString * sql = @"update UserInfo set name = ?,age = ?,image = ? where ID = ?";
    BOOL isSuccess = [fmdb executeUpdate:sql,person.personName,@(person.personAge),UIImagePNGRepresentation(person.personHeadImage),@(person.personID)];
    if (isSuccess) {
    NSLog(@"update success");
    }
    5.查
    NSString * sql = @"select * from UserInfo";
    FMResultSet * result = [fmdb executeQuery:sql];
    //定义一个数组存放表格中的所有对象
    NSMutableArray * allUserInfo = [[NSMutableArray alloc]init];
    while ([result next]) {
    //遍历表格的一行就是一个对象
    PersonInfo * person = [[PersonInfo alloc]init];
    person.personID = [result intForColumn:@"ID"];
    person.personName = [result stringForColumn:@"name"];
    person.personAge = [result intForColumn:@"age"];
    person.personHeadImage = [UIImage imageWithData:[result dataForColumn:@"image"]];
    [allUserInfo addObject:person];
    }
    return allUserInfo;

    6.CoreData使用

    coreData能够存放任意类型的对象指针包括自定义的对象指针

    相关文章

      网友评论

        本文标题:数据永久性存储

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