iOS数据库存储

###iOS数据库存储

* 表连接的解释

http://www.blogjava.net/zolly/archive/2007/10/23/SQLJION.html

sqlite语句

一. 数据定义语句

//类型: integer整型 text文本 blob二进制 real浮点//创建表, 如果没有就创建

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

//如果表格存在就删除表格

drop table if exists 表名 ;

二. 数据操作语句

//将Values后面跟的值插入到前面表中对应的字段

insert into 表名 (字段1, 字段2, …) values (字段1的值, 字段2的值, …) ;//更新对应字段的值

update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, … ;//删除表中记录

delete from 表名 ;

三. 条件语句

//当 2个条件同时成立where 字段1 = 某个值 and 字段2 > 某个值 ;

//当 2个条件有1个成立where 字段1 = 某个值 or 字段2 = 某个值 ;

四. 查询语句

// 查询指定表的某写字段名的值

select 字段1, 字段2, … from 表名 ;// 查询一张表中所有的记录 * --> 代表所有字段

select * from 表名;// 查询表中记录的个数

select count ( * ) from 表名 ;// 查询表中所有的记录, 并按照某个字段排序 默认升序, 如果要降序, 添加DESC

select * from t_student order by 字段;// 用于分页查询 参数1:索引 参数2:取值的个数// 查询记录, 根据指定的索引开始查询, 查询N个

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

五. 约束

//一般来说, not null, primary key简单约束: not null, unique, default主键约束: primary key外键约束: constraint "外键名称" foreign key ("当前表要添加外键约束的字段") references "另一张表名" ("另一张表的要添加约束的字段")

// 创建一个student表, 要求id字段整型, id是主键; name文本类型不能为空并且不能重复;age是整型不能为空, 默认为1// classID整型不能为空, 给classID增加了外键约束, 外键的名称是"fk_tstudent_classID_tclass_classID"// foreign key (classId)指定了当前表的某个字段要添加外键约束// references t_class (classID)): 连接的另一张表的要添加约束的字段

create table t_student (id integer primary key, name text not null unique, age integer not null default 1, classID integer not null , constraint fk_tstudent_classID_tclass_classID foreign key (classId) references t_class (classID)) ;

六. 表连接查询(多表查询)(起别名)

// 查询学生表中名字和年龄, 来自学生表(别名s) 班级表(别名=c) 绑定学生表中class_id和班级表中id关联 并且班级表中的name为"传智23期"

select s.name,s.age from t_student s, t_class c where s.class_id = c.id and c.name = ‘传智23期’;

FMDB

github地址https://github.com/ccgus/fmdb

需配合SQ语句使用

// 导入头文件

#import "FMDB.h"

// 数据库对象 FMDatabase

// 1. 创建并打开数据库 databaseWithPath 方法

// 2. 创建表 executeUpdate 返回值bool

// 3. 增加数据 删除数据 修改数据 都调用 executeUpdate相应方法

// 4. 查询数据 调用executeQuery 相应方法 返回值FMResultSet, FMResultSet有属性next可判      断有误下一条数据使用  string调用 int/.../stringFor 方法获取数据

cordData

Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何SQL语句,这个有点类似于著名的Hibernate持久化框架,不过功能肯定是没有Hibernate强大的。简单地用下图描述下它的作用:

CoreData本质是一个ORM框架ORM Objective-Relational Mapping这个映射就是我们的模型文件,一般ORM框架都用XML格式来映射 实体Entity+属性数据库表,列

托管对象(entity) —既不是单纯的 内存对象,也不是数据库中的具体的数据,它介于这两个状态之间的,我们叫他游离态的数据

CoreData 不能执行SQL语句 取而代之,操作的是对象,FMDB SQLite 可以直接SQL语句

需要手画图!左边是关系模型,即数据库,数据库里面有张person表,person表里面有id、name、age三个字段,而且有2条记录;右边是对象模型,可以看到,有2个OC对象;利用Core Data框架,我们就可以轻松地将数据库里面的2条记录转换成2个OC对象,也可以轻松地将2个OC对象保存到数据库中,变成2条表记录,而且不用写一条SQL语句。

开发步骤总结:1.初始化NSManagedObjectModel对象,加载模型文件,读取app中的所有实体信息2.初始化NSPersistentStoreCoordinator对象,添加持久化库(这里采取SQLite数据库)3.初始化NSManagedObjectContext对象,拿到这个上下文对象操作实体,进行CRUD(创建(Create)、更新(Update)、读取(Read)和删除(Delete))操作

CoreData的4个存储方式:

SQLiteNSSQLiteStoreType

XMLNSXMLStoreType

BinaryNSBinaryStoreType

内存存储NSInMemoryStoreType

CoreData 持久化协调器 - NSPersistentStoreCoordinator

NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]

CoreData 对象映射模型 - NSManagedObjectModel

_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

CoreData 托管对象上下文 - NSManagedObjectContext

指定队列_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];

指定协调器[_managedObjectContext setPersistentStoreCoordinator:coordinator];

CoreDate 实体描述器 - NSEntityDescription

CoreData 托管对象 - NSManageObject

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容