zoukankan      html  css  js  c++  java
  • ios中常见数据存储方式以及SQLite常用的语句

      在iOS中,根据不同的需求对应的有多种数据存储方式:

    1.NSUserdefaults  将数据存储到沙盒中(library),方便易用,但是只能存储系统提供的数据类型(plist),不能存储自定义的model。

    2,NSKeyedArchiver/NSKeyedArchiver归档,解归档/序列化,解序列化,同样将数据存储到沙盒中,由于是将数据进行序列化存储,所以,归档支持存储自定义的model(遵守NSCoding协议,实现协议方法),由于过程相对复杂,而且不能方便的增加删减内容,所以多用于存储安全性要求高,比较稳定、成熟的数据。

    3,Core Data 苹果官方给出的数据存储方式,有待研究。

    4.SQLite,轻量级的数据库。可移植性强(可以跨平台使用),管理操作简便。使用第三方fmdb,管理数据轻松加愉快。

    以下是SQLite的常用的语句:

    《1》创建表格  需要判断表格是否存在,如果不存在,才创建新的

    createtableifnotexists student(

    num integer primary key autoincrementnotnull,

    name varchar(100) notnull,

    sex booleannotnull,

    birth date,

    tel text

    )

     

    《2》插入数据 insert into (除了数字以外,其他的都需要加单引号)

    insert into student(name,sex,birth,tel) values ('jack', 'true', '2010-2-2','13123456787')

     

        创建表格时指定不能为空的字段在插入时必须有值,可为空的可以缺省

    insert into student(name,sex,birth) values ('ios', 'false', '2010-1-2')

     

    《3》查找 

    查找全部

    select * from student

    查找部分值

    select name from student

    select name,sex from student

    查找 加条件, 用 where

    select * from student where num=3

    查找 ,多个条件用and

    select num,name from student where num>=3 and num<=6

    查找,条件有范围用between

    select num,name from student where num between 3 and 6

     

    查找 条件是字符串

    select * from student where name='apple'

    值用 单引号、双引号都可以

    select * from student where name="jack"

    查找 条件是字符串 like

    select * from student where name like 'jack'

     查找以 某个字符串开头的值 (%代表任意长度,因此使用时效率比较低,建议放在后面,不要放到前面)

    select * from student where name like 'j%'

     查找以 某个字符串结束的值

    select * from student where name like '%k'

     查找 _代表任意的一个字符

    select * from student where name like '_a%'

    多个条件用and

    select * from student where name like '_a%' and num=3

     

    查找 根据某个字段的升序(asc)进行排序

    select * from student order by num asc

    查找 根据某个字段的降序(desc)进行排序

    select * from student order by name desc

    查找 根据多个条件依次排序

    select * from student order by birth asc, num desc

     

    count(*) 聚合函数, group by 根据什么分组

    select count(*) from student group by birth

    分组的条件,和分组后每个组的个数。

    group by 只能显示每个分组的个数(聚合函数)、或者分组的条件

    select birth,count(*) from student group by birth

    order by排序一定放在后面

    select birth,count(*) from student group by birth order by count(*) desc

    在表中找出学号>2的根据生日进行分组,然后根据分组后的个数降序显示每个生日的个数

    select birth,count(*) from student where num>2 group by birth order by count(*) desc

     

    as进行重命名, 将count(*) 改为 count_1

    select birth,count(*) as count_1 from student where num>2 group by birth order by count_1 desc

    as进行重命名

    select num as t_num , name from student where t_num>3

     

    子查询条件用having。 班里学号大于2的学生根据生日进行分组,显示分组之后个数大于等于2个人的分组的生日和个数,根据个数降序排列显示

    select birth,count(*) as count_1 from student where num>2 group by birth having count_1>=2 order by count_1 desc

    执行顺序:where —> select —> 执行group by —> 执行聚合函数count(*) —> having,二次筛选 —> order by 排序

     

    查找注意事项:

    1. select 后面 * 慎用,用什么查什么,提高效率

    2. where后面尽量选择用主键筛选 (索引相当于目录,数据库建主键后自动建索引,所以查主键,效率会高,查询速度快,优化查询。索引类似二叉数。索引缺点一二,如果多了或者少了,不仅要改数据,还要改索引,即增删改会变慢,查询速度快,缺点三多占存储空间)

     

    《4》删除数据  delete from where, 如果没有删除的条件,会将表格中所有的数据都删除掉

    delete from student where num>4

     

    《5》修改数据 ,更新数据 update

    update student set name='rose21' where name like 'rose'

    更新多个字段 ,注意:主键不允许更新为已经存在的值,要保证主键的值唯一

    update student set name='happy' , birth='2010-11-11' where num=2

     

    《6》删除表格,销毁表格

    drop table student

     

    《6》表连接查询

    创建学生表格

    createtable  ifnotexists jrstudent(

    num integer primary key autoincrementnotnull,

    name varchar(100) notnull,

    age integer,

    classNum integer  notnull

    )

    创建班级表格

    createtable  ifnotexists jrclass(

    c_num integer primary keynotnull,

    c_name varchar(100) notnull

    )

     

    插入学生数据

    insertinto jrstudent(name, classNum,age) values ('apple', 1, 21)

    insertinto jrstudent(name, classNum,age) values ('rose', 1, 20)

    insertinto jrstudent(name, classNum,age) values ('jack', 2, 21)

    插入班级数据

    insertinto jrclass(c_num, c_name) values (1, 'java')

    insertinto jrclass(c_num, c_name) values (2, 'ios')

     

    表连接查询   inner join on 内连接

    select * from jrstudent  innerjoin jrclass on jrstudent.classNum=jrclass.c_num

     

    表连接查询   简化操作,为表取别名

    select * from jrstudent s innerjoin jrclass c on s.classNum=c.c_num

     

    显示部分信息

    select s.num,s.name,c.c_name from jrstudent s innerjoin jrclass c on s.classNum=c.c_num

    显示部分信息

    select s.num,s.name,c.* from jrstudent s innerjoin jrclass c on s.classNum=c.c_num

     

    当两个表连接之后,如果字段名(列名)唯一时,可以直接写列名

    select name,c_name from jrstudent s innerjoin jrclass c on s.classNum=c.c_num where age>20

  • 相关阅读:
    C# bool? 逻辑运算
    C# yield return 用法与解析
    枚举器和迭代器
    C# 事件
    C# 索引器
    C# 实现单例模式的几种方法
    协变 和 逆变
    C# 结构体的特点
    装箱 和 拆箱
    继承之---对象用父类声明,用子类实例化
  • 原文地址:https://www.cnblogs.com/code-Officer/p/5727217.html
Copyright © 2011-2022 走看看