iOS移动开发之sqlite

本文详细介绍了iOS中的数据存储方式,包括Plist、Preference、NSCoding、SQLite3和CoreData,并深入探讨了SQLite数据库的基本概念、特点、SQL语句、数据库操作和查询方法,提供了一个全面的iOS数据存储解决方案。

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

iOS的数据存储方式  :

            1.Plist (例:NSArray\NSDictionary\NSData)

            2.Preference(偏好设置\NSUserDefaults) (系统自带)

            3.NSCodeing(NSKeyedArchiver\NSkeyedUnarchiver ) (归档\解档)

              4.SQLite3 

              5.Core Data (iOS5之后才出现的一个框架它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。

     一、 SQLite的简介:

           是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

     二、 什么是数据库?

  •    数据库(Database) 是按照数据结构来组织、存储和管理数据的仓库.
  •    数据库可以分为两大种类
  •    关系型数据库
  •     对象型数据
常用的关系性数据库
   PC端 :Oracle 、MySQL、SQL Serve、Access、 DB2、Sybase 
   嵌入式\移动客户端 :SQLite 

三、SQL:

  · SQL(structured query language) :结构化查询语言
  · SQL是一种对关系型数据中的数据进行定义操作的语言
  · SQL语言简洁,语法简单,易学易用
 什么是SQL语句:
 1、使用SQL语言编写出来的句子或代码,就是SQL语句
 2、 在程序运行的过程中,要想操作(增删改查、CRUD)数据库中的数据,必须使用SQL语句。

 SQL语句的特点:
 1、不区分大小写 (比如数据库认为user和UsEr是一样的)
 2、 每条语句都必须以分号;结尾

 SQL中常用的关键字有
 1、select 、insert、 update、delete、from、create、where、desc、order、by、group、table、alter、
     view、index等等
2、 数据库中不可以使用关键字来命名、字段。

 数据库定义语句 (DDL:Data Definition Language)
  1、包括create和drop等操作
  2.、在数据库中创建新表 或删除表 (create tabledrop table

 数据库操作操作语句 (DML:Data Manipulation :Language)
   1、包括insertupdatedelete等操作
   2、 上面的三种操作分别用于添加、修改、删除表中的数据

 数据查询语句 (DQL:Data Query Language)
   1、可以用于查询获得表中的数据
   2、 关键字select是DDL (也是所有SQL)用的最多的操作
   3、 其他DQL常用的关键字有whereorder bygroup byhaving
 格式 
  1、create table 表名 (字段名1  字段类型1,字段名2 字段类型2,...... );
  2、create table if no exists 表名 (字段名1 字段类型1,字段名2 字段类型2,.....);

例:create table t_student (idinteger ,nametext, age integer,scorereal);
SQLite 将数据划分为以下几种存储类型:
  integer :整型值
  real :浮点值
  text:文本字符串
  blob:二进制数据 (比如文件)

注: 实际上SQLite是⽆无类型的就算声明为integer类型,还是能存储字符串⽂文本(主键除外) ,建表时声明啥类型或者不声明类型都可以,也就意味着创表语句可以这么写:
   create table t_student(name, age); 为了保持良好的编程规范、⽅方便程序员之间的交流,编写建表语句的时候最好加上每个字段的具体类型 
 
删表 :
   格式:
    drop table 表名;
   drop table if exists 表名;

插入:
 insert into 表名 (字段1,字段2,.....)values (字段1的值,字段2的值,.....);
注意:
 数据库中的字符串内容应该用单引号‘括住


删除:
  delete from 表名;
注意:
 会把表中的所有记录都删除


条件语句:
●  如果只想更新或者删除某些固定的记录,那就必须在DML语句后加上⼀一些条件
●  条件语句的常见格式
●   where字段 =某个值; //不能⽤用两个=
●   where字段 is某个值; //is相当于=
●   where 字段 != 某个值 ;
●   where字段 isnot某个值; //isnot相当于!=
●   where字段 >某个值;
●   where 字段1 = 某个值 and 字段2 > 某个值 ; // and相当于C语⾔言中的 &&
●   where字段1 =某个值 or字段2 =某个值; // or相当于C语⾔言中的|| 

      DQL语句
  • ●  格式

  • ●  select 字段1, 字段2, ... from 表名 ;

  • ●  select *from 表名; // 查询所有的字段

  • ●  ⽰例

  • ●  select name, age from t_student ;

  • ●  select * from t_student ;

  • ●  select * from t_student where age > 10 ; // 条件查询 

       起别名

                  ●  格式(字段和表都可以起别名);

                   ●   select字段1别名,字段2别名,... from表名别名;

                   ●   select字段1别名,字段2as别名,... from表名as别名;
 
                   ●   select别名.字段1, 别名.字段2, ... from 表名 别名 ; 


计算记录的数量
    
  •      ●  格式

  •      ●  select count (字段) from 表名 ;

  •      ●  select count(*)from表名;

  •      ●  ⽰示例

  •       ●  select count (age) from t_student ;

  •       ●  select count ( * ) from t_student where score >= 60; 

 排序
  • ●  查询出来的结果可以⽤用order by进⾏行排序

  • ●  select * from t_student order by 字段 ;

• select * from t_student order by age ;

  • ●  默认是按照升序排序(由⼩小到⼤大),也可以变为降序(由⼤大到⼩小)

  • ●  select * from t_student order by age desc ; //降序

  • ●  select * from t_student order by age asc ; // 升序(默认)

  • ●  也可以⽤用多个字段进⾏行排序

  • ●  select * from t_student order by age asc, height desc ;
    • 先按照年龄排序(升序),年龄相等就按照⾝身⾼高排序(降序) 

         limit
  • ●  使⽤用limit可以精确地控制查询结果的数量,⽐比如每次只查询10条数据

  • ●  格式

  • ●  select * from 表名 limit 数值1, 数值2 ;

  • ●  ⽰示例

  • ●  select * from t_student limit 4, 8 ;
            • 可以理解为:跳过最前⾯面4条语句,然后取8条记录 

      简单的约束
  • ●  建表时可以给特定的字段设置⼀一些约束条件,常见的约束有

  •  not null :规定字段的值不能为null

  •  unique :规定字段的值必须唯⼀一

  • ●  default :指定字段的默认值(建议:尽量给字段设定严格的约束,以保证数据的规范性)

    ● 示例

            ● create table t_student (id integer, name text not null unique, age integer not null default1) ;

       • name字段不能为null,并且唯⼀一
                • age字段不能为null,并且默认为1 

       主键约束
  • ●  如果t_student表中就name和age两个字段,⽽而且有些记录的name和age字段的值都⼀一样时,那么就没法区分这些数据,造成数据库的记录不唯⼀一,这样就不⽅方便管理数据

  • ●  良好的数据库编程规范应该要保证每条记录的唯⼀一性,为此,增加了主键约束

  • ●  也就是说,每张表都必须有⼀一个主键,⽤用来标识记录的唯⼀一性

  • ●  什么是主键

  • ●  主键(Primary Key,简称PK)⽤用来唯⼀一地标识某⼀一条记录

  • ●  例如t_student可以增加⼀一个id字段作为主键,相当于⼈人的⾝身份证

  • ●  主键可以是⼀一个字段或多个字段 

     主键的设计原则

          ● 主键应当是对⽤用户没有意义的

          ● 永远也不要更新主键 

          ● 主键不应包含动态变化的数据

          ● 主键应当由计算机⾃自动⽣生成 

     主键的声明
  • ●  在创表的时候⽤用primary key声明⼀一个主键

  • ●  create table t_student (id integer primary key, name text, age integer) ;

  • ●  integer类型的id作为t_student表的主键

  • ●  主键字段

  • ●  只要声明为primary key,就说明是⼀一个主键字段

  • ●  主键字段默认就包含了not null 和 unique 两个约束

  • ●  如果想要让主键⾃自动增长(必须是integer类型),应该增加autoincrement

  • ●  create table t_student (id integer primary key autoincrement, name text, ageinteger

      外键的约束

 ● 利⽤用外键约束可以⽤用来建⽴立表与表之间的联系

外键的⼀一般情况是:⼀一张表的某个字段,引⽤用着另⼀一张表的主键字段

●  新建⼀一个外键

 create table t_student (idinteger primary key autoincrement, name text, age integer,class_id integer, constraint fk_t_student_class_id_t_class_idforeign key (class_id)(id)) ; references t_class

●  t_student表中有⼀一个叫做fk_t_student_class_id_t_class_id的外键

这个外键的作⽤用是⽤用t_student表中的class_id字段引⽤用t_class表的id字段 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值