iOS-常见的数据存储方式

本文介绍了iOS中五种常见的数据存储方式:Plist、Preference、NSCoding、SQLite3及CoreData,对比了它们适用的场景及操作复杂度。此外,文章还深入探讨了SQLite3的使用方法,包括数据库操作的基本SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iOS中常见的数据存储方式

  • Plist(NSArray\NSDictionary)
  • Preference(偏好设置\NSUserDefaults)
  • NSCoding(NSKeyedArchiver\NSkeyedUnarchiver)
  • SQLite3 (C语言,轻量级)
  • Core Data(OC语言,底层基于SQLite,重量级)

前三种方法适合存储简单的数据类型
后面两种适合存储大量数据,但Core Data偏向于重量级的数据存储,其操作相比SQLite3更加繁琐
对于SQLite,如果单纯使用它,在数据查询方面会比较繁琐,建议使用一款对其封装的的数据存储FMDB( OC 语言,操作简单 )


一、Plist

NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;

    NSString *arrayPath = [path stringByAppendingPathComponent:@"array.plist"];
    NSString *dictPath   = [path stringByAppendingPathComponent:@"dict.plist"];

    NSArray *array = @[@"a",@"b",@"c"];
    [array writeToFile:arrayPath atomically:YES];

    NSDictionary *dict = @{@"a":@1,@"b":@2,@"c":@3};
    [dict writeToFile:dictPath atomically:YES];

二、Preference

// 存
    // 存对象
    NSArray *arr = @[@"a",@"b"];
    [[NSUserDefaults standardUserDefaults] setObject:arr forKey:@"object"];
    // 存值
    [[NSUserDefaults standardUserDefaults] setValue:@"123" forKey:@"value"];
    // 存bool值
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"boolean"];

// 取
    NSArray *array = [[NSUserDefaults standardUserDefaults] objectForKey:@"object"];
    NSString *value = [[[NSUserDefaults standardUserDefaults] valueForKey:@"value"] stringValue];

三、NSCoding

如果是自定义对象的的归档和反归档,需要遵守NSCoding协议,并实现对应的方法

    NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
    NSString *dictPath = [path stringByAppendingPathComponent:@"dict.plist"];

    NSDictionary *dict = @{@"a":@1};
// 归档
    [NSKeyedArchiver archiveRootObject:dict toFile:dictPath];
    <!--此方法等同于下面两个方法-->
    /**
     *  NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dict];
     *  [data writeToFile:dictPath atomically:YES];
     */
// 反归档
    NSDictionary *dic = [NSKeyedUnarchiver unarchiveObjectWithFile:dictPath];

四、SQLite

  • SQLite是一款轻型的嵌入式数据库
  • 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了
  • 它的处理速度比Mysql、PostgreSQL这两款著名的数据库都还快
数据库存储数据的步骤:
01、新建一张表(table)
02、添加多个字段(column,列,属性)
03、添加多行记录(row,record,每行存放多个字段对应的值)
SQLite将数据划分为以下几种存储类型:
  • integer : 整型值
  • real : 浮点值
  • text : 文本字符串
  • blob : 二进制数据(比如文件)

实际上SQLite是无类型的
就算声明为integer类型,还是能存储字符串文本(主键除外)


SQL语句

在程序运行过程中,要想操作(增删改查,CRUD)数据库中的数据,必须使用SQL语句

SQL语句的特点

不区分大小写(比如数据库认为user和UsEr是一样的)
每条语句都必须以分号 ‘;’ 结尾
SQL中的常用关键字有:
select、insert、update、delete、from、create、where、desc、order、by、group、table、alter、view、index等等
  • 数据定义语句(DDL:Data Definition Language)
    包括create和drop等操作
    create table - 创建表
    drop table   - 删除表
  • 数据操作语句(DML:Data Manipulation Language)
    包括insert、update、delete等操作
    insert  - 添加
    update  - 修改
    delete  - 删除
  • 数据查询语句(DQL:Data Query Language)
    可以用于查询获得表中的数据
    关键字select是DQL(也是所有SQL)用得最多的操作
    select - 查找
    where - 位置
    order by - 排序
    group by - 分组
    desc -  降序
    asc - 升序
  • 条件语句
    如果只想更新或者删除某些固定的记录,那就必须在DML语句后加上一些条件
条件语句的常见格式
    where 字段 = 某个值 ;   // 不能用两个 =
    where 字段 is 某个值 ;   // is 相当于 = 
    where 字段 != 某个值 ; 
    where 字段 is not 某个值 ;   // is not 相当于 != 
    where 字段 > 某个值 ; 
    where 字段1 = 某个值 and 字段2 > 某个值 ;  // and相当于C语言中的 &&
    where 字段1 = 某个值 or 字段2 = 某个值 ;  //  or 相当于C语言中的 ||

01、创表

格式
create table 表名 (字段名1 字段类型1, 字段名2 字段类型2, …) ;
create table if not exists 表名 (字段名1 字段类型1, 字段名2 字段类型2, …) ;

示例
create table t_person (id integer, name text, age inetger, height real) ;


02、删表

格式
drop table 表名 ;
drop table if exists 表名 ;

示例
drop table t_person ;


03、插入数据(insert)

格式
insert into 表名 (字段1, 字段2, …) values (字段1的值, 字段2的值, …) ;

示例
insert into t_person (name, age,height) values (‘xiaoming’, 20, 1.75) ;

注意
数据库中的字符串内容应该用单引号 ’ 括住


04、更新数据(update)

格式
update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, … ;

示例
update t_person set name = ‘xiaohong’, age = 18;

注意
上面的示例会将t_person表中所有记录的name都改为xiaohong,age都改为18


05、删除数据(delete)

格式
delete from 表名 ;

示例
delete from t_person ;

注意
上面的示例会将t_person表中所有记录都删掉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值